summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/plugin_uma.h
diff options
context:
space:
mode:
authortbarzic@chromium.org <tbarzic@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-21 17:21:46 +0000
committertbarzic@chromium.org <tbarzic@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-21 17:21:46 +0000
commitde692fafd75988ecba2557eb38b9e3470474a278 (patch)
treec29627763a2fb4c88d2af0344ae2b626890c470e /chrome/renderer/plugin_uma.h
parent55a9d6260383a2d531ca86e3db6fe4e344fbf667 (diff)
downloadchromium_src-de692fafd75988ecba2557eb38b9e3470474a278.zip
chromium_src-de692fafd75988ecba2557eb38b9e3470474a278.tar.gz
chromium_src-de692fafd75988ecba2557eb38b9e3470474a278.tar.bz2
Adding support for collecting anonymous UMA stats for missing plugins.
We keep track of: * Windows media player (appluication/x-mplayer2) * Silverlight (application/x-silverlight*) * RealPlayer (audio/x-pn-realaudio*) * Java (application/x-java-applet) * QuickTime (video/quicktime) TEST=Ran PluginUMATest.* unit_test BUG=chromium-os:16696 Review URL: http://codereview.chromium.org/7351023 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@93426 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/plugin_uma.h')
-rw-r--r--chrome/renderer/plugin_uma.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/chrome/renderer/plugin_uma.h b/chrome/renderer/plugin_uma.h
new file mode 100644
index 0000000..411a8ae
--- /dev/null
+++ b/chrome/renderer/plugin_uma.h
@@ -0,0 +1,70 @@
+// 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_PLUGIN_UMA_H_
+#define CHROME_RENDERER_PLUGIN_UMA_H_
+
+#include <string>
+
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/singleton.h"
+#include "googleurl/src/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 MissingPluginReporter {
+ public:
+ // This must be sync'd with histogram values.
+ enum PluginType {
+ WINDOWS_MEDIA_PLAYER = 0,
+ SILVERLIGHT = 1,
+ REALPLAYER = 2,
+ JAVA = 3,
+ QUICKTIME = 4,
+ OTHER = 5
+ };
+
+ // Sends UMA data, i.e. plugin's type.
+ class UMASender {
+ public:
+ virtual ~UMASender() {}
+ virtual void SendPluginUMA(PluginType plugin_type) = 0;
+ };
+
+ // Returns singleton instance.
+ static MissingPluginReporter* GetInstance();
+
+ void ReportPluginMissing(std::string plugin_mime_type,
+ const GURL& plugin_src);
+
+ // Used in testing.
+ void SetUMASender(UMASender* sender);
+
+ private:
+ friend struct DefaultSingletonTraits<MissingPluginReporter>;
+
+ MissingPluginReporter();
+ ~MissingPluginReporter();
+
+ 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);
+
+ // 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(MissingPluginReporter);
+};
+
+#endif // CHROME_RENDERER_PLUGIN_UMA_H_
+