15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef CHROME_RENDERER_PEPPER_PEPPER_UMA_HOST_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define CHROME_RENDERER_PEPPER_PEPPER_UMA_HOST_H_
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <set>
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <string>
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/files/file_path.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/c/pp_instance.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/c/pp_resource.h"
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/host/resource_host.h"
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "url/gurl.h"
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace content {
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class RendererPpapiHost;
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace ppapi {
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace host {
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct HostMessageContext;
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace host
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace ppapi
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class PepperUMAHost : public ppapi::host::ResourceHost {
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  PepperUMAHost(content::RendererPpapiHost* host,
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                PP_Instance instance,
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                PP_Resource resource);
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ~PepperUMAHost();
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // ppapi::host::ResourceMessageHandler implementation.
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual int32_t OnResourceMessageReceived(
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const IPC::Message& msg,
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ppapi::host::HostMessageContext* context) OVERRIDE;
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private:
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  bool IsPluginWhitelisted();
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool IsHistogramAllowed(const std::string& histogram);
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
44c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  int32_t OnHistogramCustomTimes(ppapi::host::HostMessageContext* context,
45c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                 const std::string& name,
46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                 int64_t sample,
47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                 int64_t min,
48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                 int64_t max,
49c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                 uint32_t bucket_count);
50c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
51c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  int32_t OnHistogramCustomCounts(ppapi::host::HostMessageContext* context,
52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                  const std::string& name,
53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                  int32_t sample,
54c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                  int32_t min,
55c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                  int32_t max,
56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                  uint32_t bucket_count);
57c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  int32_t OnHistogramEnumeration(ppapi::host::HostMessageContext* context,
59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                 const std::string& name,
60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                 int32_t sample,
61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                 int32_t boundary_value);
62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  int32_t OnIsCrashReportingEnabled(ppapi::host::HostMessageContext* context);
64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const GURL document_url_;
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool is_plugin_in_process_;
67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  base::FilePath plugin_base_name_;
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Set of origins that can use UMA private APIs from NaCl.
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::set<std::string> allowed_origins_;
71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Set of hashed histogram prefixes that can be used from this interface.
72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  std::set<std::string> allowed_histogram_prefixes_;
73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Set of plugin files names that are allowed to use this interface.
74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  std::set<std::string> allowed_plugin_base_names_;
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PepperUMAHost);
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // CHROME_RENDERER_PEPPER_PEPPER_UMA_HOST_H_
80