Unregister from GCM when the only GCM app is removed
[chromium-blink-merge.git] / chrome / renderer / plugins / plugin_uma.h
blob6dbef1987c19a49012efa41b579ff9a9bb61d56c
1 // Copyright (c) 2011 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 #ifndef CHROME_RENDERER_PLUGINS_PLUGIN_UMA_H_
6 #define CHROME_RENDERER_PLUGINS_PLUGIN_UMA_H_
8 #include <string>
10 #include "base/memory/scoped_ptr.h"
11 #include "base/memory/singleton.h"
12 #include "url/gurl.h"
14 // Used to send UMA data about missing plugins to UMA histogram server. Method
15 // ReportPluginMissing should be called whenever plugin that is not available or
16 // enabled is called. We try to determine plugin's type by requested mime type,
17 // or, if mime type is unknown, by plugin's src url.
18 class PluginUMAReporter {
19 public:
20 enum ReportType {
21 MISSING_PLUGIN,
22 DISABLED_PLUGIN
25 // Make sure the enum list in tools/histogram/histograms.xml is updated with
26 // any change in this list.
27 enum PluginType {
28 WINDOWS_MEDIA_PLAYER = 0,
29 SILVERLIGHT = 1,
30 REALPLAYER = 2,
31 JAVA = 3,
32 QUICKTIME = 4,
33 OTHER = 5, // This is obsolete and replaced by UNSUPPORTED_* types.
34 UNSUPPORTED_MIMETYPE,
35 UNSUPPORTED_EXTENSION,
36 // NOTE: Add new unsupported types only immediately above this line.
37 BROWSER_PLUGIN = 10,
38 SHOCKWAVE_FLASH,
39 WIDEVINE_CDM,
40 // NOTE: Add new plugin types only immediately above this line.
41 PLUGIN_TYPE_MAX
44 // Sends UMA data, i.e. plugin's type.
45 class UMASender {
46 public:
47 virtual ~UMASender() {}
48 virtual void SendPluginUMA(ReportType report_type,
49 PluginType plugin_type) = 0;
52 // Returns singleton instance.
53 static PluginUMAReporter* GetInstance();
55 void ReportPluginMissing(const std::string& plugin_mime_type,
56 const GURL& plugin_src);
58 void ReportPluginDisabled(const std::string& plugin_mime_type,
59 const GURL& plugin_src);
61 private:
62 friend struct DefaultSingletonTraits<PluginUMAReporter>;
63 friend class PluginUMATest;
65 PluginUMAReporter();
66 ~PluginUMAReporter();
68 static bool CompareCStrings(const char* first, const char* second);
69 bool CStringArrayContainsCString(const char* const* array,
70 size_t array_size,
71 const char* str);
72 // Extracts file extension from url.
73 void ExtractFileExtension(const GURL& src, std::string* extension);
75 PluginType GetPluginType(const std::string& plugin_mime_type,
76 const GURL& plugin_src);
78 // Converts plugin's src to plugin type.
79 PluginType SrcToPluginType(const GURL& src);
80 // Converts plugin's mime type to plugin type.
81 PluginType MimeTypeToPluginType(const std::string& mime_type);
83 scoped_ptr<UMASender> report_sender_;
85 DISALLOW_COPY_AND_ASSIGN(PluginUMAReporter);
88 #endif // CHROME_RENDERER_PLUGINS_PLUGIN_UMA_H_