// 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. #include "shell/renderer/electron_renderer_pepper_host_factory.h" #include #include #include "base/logging.h" #include "content/public/renderer/renderer_ppapi_host.h" #include "ppapi/host/dispatch_host_message.h" #include "ppapi/host/ppapi_host.h" #include "ppapi/host/resource_host.h" #include "ppapi/proxy/ppapi_message_utils.h" #include "ppapi/proxy/ppapi_messages.h" #include "ppapi/shared_impl/ppapi_permissions.h" using ppapi::host::ResourceHost; // Stub class which ignores all messages class PepperUMAHost : public ppapi::host::ResourceHost { public: PepperUMAHost(content::RendererPpapiHost* host, PP_Instance instance, PP_Resource resource) : ResourceHost(host->GetPpapiHost(), instance, resource) {} ~PepperUMAHost() override = default; // ppapi::host::ResourceMessageHandler implementation. int32_t OnResourceMessageReceived( const IPC::Message& msg, ppapi::host::HostMessageContext* context) override { PPAPI_BEGIN_MESSAGE_MAP(PepperUMAHost, msg) PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_UMA_HistogramCustomTimes, OnHistogramCustomTimes) PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_UMA_HistogramCustomCounts, OnHistogramCustomCounts) PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_UMA_HistogramEnumeration, OnHistogramEnumeration) PPAPI_DISPATCH_HOST_RESOURCE_CALL_0( PpapiHostMsg_UMA_IsCrashReportingEnabled, OnIsCrashReportingEnabled) PPAPI_END_MESSAGE_MAP() return PP_ERROR_FAILED; } private: int32_t OnHistogramCustomTimes(ppapi::host::HostMessageContext* context, const std::string& name, int64_t sample, int64_t min, int64_t max, uint32_t bucket_count) { return PP_OK; } int32_t OnHistogramCustomCounts(ppapi::host::HostMessageContext* context, const std::string& name, int32_t sample, int32_t min, int32_t max, uint32_t bucket_count) { return PP_OK; } int32_t OnHistogramEnumeration(ppapi::host::HostMessageContext* context, const std::string& name, int32_t sample, int32_t boundary_value) { return PP_OK; } int32_t OnIsCrashReportingEnabled(ppapi::host::HostMessageContext* context) { return PP_OK; } }; ElectronRendererPepperHostFactory::ElectronRendererPepperHostFactory( content::RendererPpapiHost* host) : host_(host) {} ElectronRendererPepperHostFactory::~ElectronRendererPepperHostFactory() {} std::unique_ptr ElectronRendererPepperHostFactory::CreateResourceHost( ppapi::host::PpapiHost* host, PP_Resource resource, PP_Instance instance, const IPC::Message& message) { DCHECK_EQ(host_->GetPpapiHost(), host); // Make sure the plugin is giving us a valid instance for this resource. if (!host_->IsValidInstance(instance)) return nullptr; // Permissions for the following interfaces will be checked at the // time of the corresponding instance's method calls. Currently these // interfaces are available only for whitelisted apps which may not have // access to the other private interfaces. switch (message.type()) { case PpapiHostMsg_UMA_Create::ID: { return std::make_unique(host_, instance, resource); } } return nullptr; }