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. 4 5 #ifndef CHROME_RENDERER_PLUGINS_PLUGIN_UMA_H_ 6 #define CHROME_RENDERER_PLUGINS_PLUGIN_UMA_H_ 7 8 #include <string> 9 10 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/singleton.h" 12 #include "url/gurl.h" 13 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 23 }; 24 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 42 }; 43 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; 50 }; 51 52 // Returns singleton instance. 53 static PluginUMAReporter* GetInstance(); 54 55 void ReportPluginMissing(const std::string& plugin_mime_type, 56 const GURL& plugin_src); 57 58 void ReportPluginDisabled(const std::string& plugin_mime_type, 59 const GURL& plugin_src); 60 61 private: 62 friend struct DefaultSingletonTraits<PluginUMAReporter>; 63 friend class PluginUMATest; 64 65 PluginUMAReporter(); 66 ~PluginUMAReporter(); 67 68 static bool CompareCStrings(const char* first, const char* second); 69 bool CStringArrayContainsCString(const char** 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); 74 75 PluginType GetPluginType(const std::string& plugin_mime_type, 76 const GURL& plugin_src); 77 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); 82 83 scoped_ptr<UMASender> report_sender_; 84 85 DISALLOW_COPY_AND_ASSIGN(PluginUMAReporter); 86 }; 87 88 #endif // CHROME_RENDERER_PLUGINS_PLUGIN_UMA_H_ 89