// Copyright (c) 2011 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. #ifndef CHROME_RENDERER_PLUGINS_PLUGIN_UMA_H_ #define CHROME_RENDERER_PLUGINS_PLUGIN_UMA_H_ #include <string> #include "base/memory/scoped_ptr.h" #include "base/memory/singleton.h" #include "url/gurl.h" // Used to send UMA data about missing plugins to UMA histogram server. Method // ReportPluginMissing should be called whenever plugin that is not available or // enabled is called. We try to determine plugin's type by requested mime type, // or, if mime type is unknown, by plugin's src url. class PluginUMAReporter { public: enum ReportType { MISSING_PLUGIN, DISABLED_PLUGIN }; // Make sure the enum list in tools/histogram/histograms.xml is updated with // any change in this list. enum PluginType { WINDOWS_MEDIA_PLAYER = 0, SILVERLIGHT = 1, REALPLAYER = 2, JAVA = 3, QUICKTIME = 4, OTHER = 5, // This is obsolete and replaced by UNSUPPORTED_* types. UNSUPPORTED_MIMETYPE, UNSUPPORTED_EXTENSION, // NOTE: Add new unsupported types only immediately above this line. BROWSER_PLUGIN = 10, SHOCKWAVE_FLASH, WIDEVINE_CDM, // NOTE: Add new plugin types only immediately above this line. PLUGIN_TYPE_MAX }; // Sends UMA data, i.e. plugin's type. class UMASender { public: virtual ~UMASender() {} virtual void SendPluginUMA(ReportType report_type, PluginType plugin_type) = 0; }; // Returns singleton instance. static PluginUMAReporter* GetInstance(); void ReportPluginMissing(const std::string& plugin_mime_type, const GURL& plugin_src); void ReportPluginDisabled(const std::string& plugin_mime_type, const GURL& plugin_src); private: friend struct DefaultSingletonTraits<PluginUMAReporter>; friend class PluginUMATest; PluginUMAReporter(); ~PluginUMAReporter(); static bool CompareCStrings(const char* first, const char* second); bool CStringArrayContainsCString(const char** array, size_t array_size, const char* str); // Extracts file extension from url. void ExtractFileExtension(const GURL& src, std::string* extension); PluginType GetPluginType(const std::string& plugin_mime_type, const GURL& plugin_src); // Converts plugin's src to plugin type. PluginType SrcToPluginType(const GURL& src); // Converts plugin's mime type to plugin type. PluginType MimeTypeToPluginType(const std::string& mime_type); scoped_ptr<UMASender> report_sender_; DISALLOW_COPY_AND_ASSIGN(PluginUMAReporter); }; #endif // CHROME_RENDERER_PLUGINS_PLUGIN_UMA_H_