Roll src/third_party/WebKit 6c137a7:4aace46 (svn 202008:202009)
[chromium-blink-merge.git] / ppapi / proxy / dispatcher.cc
blob3c038a3906d8361d0623c62c74d88762a2c40483
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.
5 #include "ppapi/proxy/dispatcher.h"
7 #include <string.h> // For memset.
9 #include <map>
11 #include "base/compiler_specific.h"
12 #include "base/logging.h"
13 #include "base/memory/singleton.h"
14 #include "ppapi/proxy/ppapi_messages.h"
15 #include "ppapi/proxy/var_serialization_rules.h"
17 namespace IPC {
18 class MessageFilter;
21 namespace ppapi {
22 namespace proxy {
24 Dispatcher::Dispatcher(PP_GetInterface_Func local_get_interface,
25 const PpapiPermissions& permissions)
26 : local_get_interface_(local_get_interface),
27 permissions_(permissions) {
30 Dispatcher::~Dispatcher() {
33 InterfaceProxy* Dispatcher::GetInterfaceProxy(ApiID id) {
34 InterfaceProxy* proxy = proxies_[id].get();
35 if (!proxy) {
36 // Handle the first time for a given API by creating the proxy for it.
37 InterfaceProxy::Factory factory =
38 InterfaceList::GetInstance()->GetFactoryForID(id);
39 if (!factory) {
40 NOTREACHED();
41 return NULL;
43 proxy = factory(this);
44 DCHECK(proxy);
45 proxies_[id].reset(proxy);
47 return proxy;
50 void Dispatcher::AddIOThreadMessageFilter(
51 scoped_refptr<IPC::MessageFilter> filter) {
52 // Our filter is refcounted. The channel will call the destruct method on the
53 // filter when the channel is done with it, so the corresponding Release()
54 // happens there.
55 channel()->AddFilter(filter.get());
58 bool Dispatcher::OnMessageReceived(const IPC::Message& msg) {
59 if (msg.routing_id() <= 0 || msg.routing_id() >= API_ID_COUNT) {
60 OnInvalidMessageReceived();
61 return true;
64 InterfaceProxy* proxy = GetInterfaceProxy(
65 static_cast<ApiID>(msg.routing_id()));
66 if (!proxy) {
67 NOTREACHED();
68 return true;
70 return proxy->OnMessageReceived(msg);
73 void Dispatcher::SetSerializationRules(
74 VarSerializationRules* var_serialization_rules) {
75 serialization_rules_ = var_serialization_rules;
78 void Dispatcher::OnInvalidMessageReceived() {
81 } // namespace proxy
82 } // namespace ppapi