blob: 593ed7d0afaa2eca6a683acd6e3a240aca620fa2 [file] [log] [blame]
[email protected]f24448db2011-01-27 20:40:391// Copyright (c) 2011 The Chromium Authors. All rights reserved.
[email protected]1054c072010-11-05 22:52:482// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "ppapi/proxy/ppb_testing_proxy.h"
6
7#include "base/message_loop.h"
8#include "ppapi/c/dev/ppb_testing_dev.h"
9#include "ppapi/proxy/plugin_dispatcher.h"
[email protected]f24448db2011-01-27 20:40:3910#include "ppapi/proxy/plugin_resource.h"
11#include "ppapi/proxy/plugin_resource_tracker.h"
[email protected]1054c072010-11-05 22:52:4812#include "ppapi/proxy/ppapi_messages.h"
13
14namespace pp {
15namespace proxy {
16
17namespace {
18
[email protected]f24448db2011-01-27 20:40:3919PP_Bool ReadImageData(PP_Resource graphics_2d,
[email protected]19d2b012010-11-08 16:32:1820 PP_Resource image,
21 const PP_Point* top_left) {
[email protected]f24448db2011-01-27 20:40:3922 PluginResource* image_object = PluginResourceTracker::GetInstance()->
23 GetResourceObject(image);
[email protected]4614f192011-01-21 00:26:4324 if (!image_object)
25 return PP_FALSE;
[email protected]f24448db2011-01-27 20:40:3926 PluginResource* graphics_2d_object =
27 PluginResourceTracker::GetInstance()->GetResourceObject(graphics_2d);
28 if (!graphics_2d_object ||
29 image_object->instance() != graphics_2d_object->instance())
30 return PP_FALSE;
31
[email protected]4614f192011-01-21 00:26:4332 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(
33 image_object->instance());
34 if (!dispatcher)
35 return PP_FALSE;
36
[email protected]19d2b012010-11-08 16:32:1837 PP_Bool result = PP_FALSE;
[email protected]4614f192011-01-21 00:26:4338 dispatcher->Send(new PpapiHostMsg_PPBTesting_ReadImageData(
[email protected]f24448db2011-01-27 20:40:3939 INTERFACE_ID_PPB_TESTING, graphics_2d_object->host_resource(),
40 image_object->host_resource(), *top_left, &result));
[email protected]1054c072010-11-05 22:52:4841 return result;
42}
43
[email protected]7358d572011-02-15 18:44:4044void RunMessageLoop(PP_Instance instance) {
45 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance);
46 if (!dispatcher)
47 return;
48 IPC::SyncMessage* msg = new PpapiHostMsg_PPBTesting_RunMessageLoop(
49 INTERFACE_ID_PPB_TESTING, instance);
50 msg->EnableMessagePumping();
51 dispatcher->Send(msg);
[email protected]1054c072010-11-05 22:52:4852}
53
[email protected]7358d572011-02-15 18:44:4054void QuitMessageLoop(PP_Instance instance) {
55 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance);
56 if (!dispatcher)
57 return;
58 dispatcher->Send(new PpapiHostMsg_PPBTesting_QuitMessageLoop(
59 INTERFACE_ID_PPB_TESTING, instance));
[email protected]1054c072010-11-05 22:52:4860}
61
[email protected]4614f192011-01-21 00:26:4362uint32_t GetLiveObjectsForInstance(PP_Instance instance_id) {
63 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance_id);
64 if (!dispatcher)
65 return static_cast<uint32_t>(-1);
66
[email protected]1054c072010-11-05 22:52:4867 uint32_t result = 0;
[email protected]4614f192011-01-21 00:26:4368 dispatcher->Send(new PpapiHostMsg_PPBTesting_GetLiveObjectsForInstance(
69 INTERFACE_ID_PPB_TESTING, instance_id, &result));
[email protected]1054c072010-11-05 22:52:4870 return result;
71}
72
73const PPB_Testing_Dev testing_interface = {
74 &ReadImageData,
75 &RunMessageLoop,
76 &QuitMessageLoop,
[email protected]4614f192011-01-21 00:26:4377 &GetLiveObjectsForInstance
[email protected]1054c072010-11-05 22:52:4878};
79
[email protected]465faa22011-02-08 16:31:4680InterfaceProxy* CreateTestingProxy(Dispatcher* dispatcher,
81 const void* target_interface) {
82 return new PPB_Testing_Proxy(dispatcher, target_interface);
83}
84
[email protected]1054c072010-11-05 22:52:4885} // namespace
86
87PPB_Testing_Proxy::PPB_Testing_Proxy(Dispatcher* dispatcher,
88 const void* target_interface)
89 : InterfaceProxy(dispatcher, target_interface) {
90}
91
92PPB_Testing_Proxy::~PPB_Testing_Proxy() {
93}
94
[email protected]465faa22011-02-08 16:31:4695// static
96const InterfaceProxy::Info* PPB_Testing_Proxy::GetInfo() {
97 static const Info info = {
98 &testing_interface,
99 PPB_TESTING_DEV_INTERFACE,
100 INTERFACE_ID_PPB_TESTING,
101 false,
102 &CreateTestingProxy,
103 };
104 return &info;
[email protected]1054c072010-11-05 22:52:48105}
106
[email protected]a95986a82010-12-24 06:19:28107bool PPB_Testing_Proxy::OnMessageReceived(const IPC::Message& msg) {
108 bool handled = true;
[email protected]1054c072010-11-05 22:52:48109 IPC_BEGIN_MESSAGE_MAP(PPB_Testing_Proxy, msg)
110 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBTesting_ReadImageData,
111 OnMsgReadImageData)
112 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBTesting_RunMessageLoop,
113 OnMsgRunMessageLoop)
114 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBTesting_QuitMessageLoop,
115 OnMsgQuitMessageLoop)
[email protected]4614f192011-01-21 00:26:43116 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBTesting_GetLiveObjectsForInstance,
117 OnMsgGetLiveObjectsForInstance)
[email protected]a95986a82010-12-24 06:19:28118 IPC_MESSAGE_UNHANDLED(handled = false)
[email protected]1054c072010-11-05 22:52:48119 IPC_END_MESSAGE_MAP()
[email protected]a95986a82010-12-24 06:19:28120 return handled;
[email protected]1054c072010-11-05 22:52:48121}
122
[email protected]f24448db2011-01-27 20:40:39123void PPB_Testing_Proxy::OnMsgReadImageData(
124 const HostResource& device_context_2d,
125 const HostResource& image,
126 const PP_Point& top_left,
127 PP_Bool* result) {
[email protected]1054c072010-11-05 22:52:48128 *result = ppb_testing_target()->ReadImageData(
[email protected]f24448db2011-01-27 20:40:39129 device_context_2d.host_resource(), image.host_resource(), &top_left);
[email protected]1054c072010-11-05 22:52:48130}
131
[email protected]7358d572011-02-15 18:44:40132void PPB_Testing_Proxy::OnMsgRunMessageLoop(PP_Instance instance) {
133 ppb_testing_target()->RunMessageLoop(instance);
[email protected]1054c072010-11-05 22:52:48134}
135
[email protected]7358d572011-02-15 18:44:40136void PPB_Testing_Proxy::OnMsgQuitMessageLoop(PP_Instance instance) {
137 ppb_testing_target()->QuitMessageLoop(instance);
[email protected]1054c072010-11-05 22:52:48138}
139
[email protected]4614f192011-01-21 00:26:43140void PPB_Testing_Proxy::OnMsgGetLiveObjectsForInstance(PP_Instance instance,
[email protected]f24448db2011-01-27 20:40:39141 uint32_t* result) {
[email protected]4614f192011-01-21 00:26:43142 *result = ppb_testing_target()->GetLiveObjectsForInstance(instance);
[email protected]1054c072010-11-05 22:52:48143}
144
145} // namespace proxy
146} // namespace pp