1 // Copyright 2014 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 CHROME_RENDERER_PEPPER_PEPPER_UMA_HOST_H_ 6 #define CHROME_RENDERER_PEPPER_PEPPER_UMA_HOST_H_ 7 8 #include <set> 9 #include <string> 10 11 #include "base/files/file_path.h" 12 #include "ppapi/c/pp_instance.h" 13 #include "ppapi/c/pp_resource.h" 14 #include "ppapi/host/resource_host.h" 15 #include "url/gurl.h" 16 17 namespace content { 18 class RendererPpapiHost; 19 } 20 21 namespace ppapi { 22 namespace host { 23 struct HostMessageContext; 24 } // namespace host 25 } // namespace ppapi 26 27 class PepperUMAHost : public ppapi::host::ResourceHost { 28 public: 29 PepperUMAHost(content::RendererPpapiHost* host, 30 PP_Instance instance, 31 PP_Resource resource); 32 33 virtual ~PepperUMAHost(); 34 35 // ppapi::host::ResourceMessageHandler implementation. 36 virtual int32_t OnResourceMessageReceived( 37 const IPC::Message& msg, 38 ppapi::host::HostMessageContext* context) OVERRIDE; 39 40 private: 41 bool IsPluginWhitelisted(); 42 bool IsHistogramAllowed(const std::string& histogram); 43 44 int32_t OnHistogramCustomTimes(ppapi::host::HostMessageContext* context, 45 const std::string& name, 46 int64_t sample, 47 int64_t min, 48 int64_t max, 49 uint32_t bucket_count); 50 51 int32_t OnHistogramCustomCounts(ppapi::host::HostMessageContext* context, 52 const std::string& name, 53 int32_t sample, 54 int32_t min, 55 int32_t max, 56 uint32_t bucket_count); 57 58 int32_t OnHistogramEnumeration(ppapi::host::HostMessageContext* context, 59 const std::string& name, 60 int32_t sample, 61 int32_t boundary_value); 62 63 int32_t OnIsCrashReportingEnabled(ppapi::host::HostMessageContext* context); 64 65 const GURL document_url_; 66 bool is_plugin_in_process_; 67 base::FilePath plugin_base_name_; 68 69 // Set of origins that can use UMA private APIs from NaCl. 70 std::set<std::string> allowed_origins_; 71 // Set of hashed histogram prefixes that can be used from this interface. 72 std::set<std::string> allowed_histogram_prefixes_; 73 // Set of plugin files names that are allowed to use this interface. 74 std::set<std::string> allowed_plugin_base_names_; 75 76 DISALLOW_COPY_AND_ASSIGN(PepperUMAHost); 77 }; 78 79 #endif // CHROME_RENDERER_PEPPER_PEPPER_UMA_HOST_H_ 80