Home | History | Annotate | Download | only in plugins
      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 #include <gtest/gtest.h>
      6 
      7 #include "chrome/renderer/plugins/plugin_uma.h"
      8 
      9 class PluginUMATest : public testing::Test {
     10  public:
     11   static void ExpectPluginType(
     12       PluginUMAReporter::PluginType expected_plugin_type,
     13       const std::string& plugin_mime_type,
     14       const GURL& plugin_src) {
     15     EXPECT_EQ(expected_plugin_type,
     16               PluginUMAReporter::GetInstance()->GetPluginType(plugin_mime_type,
     17                                                               plugin_src));
     18   }
     19 };
     20 
     21 TEST_F(PluginUMATest, WindowsMediaPlayer) {
     22   ExpectPluginType(PluginUMAReporter::WINDOWS_MEDIA_PLAYER,
     23                    "application/x-mplayer2",
     24                    GURL("file://some_file.mov"));
     25   ExpectPluginType(PluginUMAReporter::UNSUPPORTED_MIMETYPE,
     26                    "application/x-mplayer2-some_sufix",
     27                    GURL("file://some_file.mov"));
     28   ExpectPluginType(PluginUMAReporter::UNSUPPORTED_MIMETYPE,
     29                    "some-prefix-application/x-mplayer2",
     30                    GURL("file://some_file.mov"));
     31 }
     32 
     33 TEST_F(PluginUMATest, Silverlight) {
     34   ExpectPluginType(PluginUMAReporter::SILVERLIGHT,
     35                    "application/x-silverlight",
     36                    GURL("aaaa"));
     37   ExpectPluginType(PluginUMAReporter::SILVERLIGHT,
     38                    "application/x-silverlight-some-sufix",
     39                    GURL("aaaa"));
     40   ExpectPluginType(PluginUMAReporter::UNSUPPORTED_MIMETYPE,
     41                    "some-prefix-application/x-silverlight",
     42                    GURL("aaaa"));
     43 }
     44 
     45 TEST_F(PluginUMATest, RealPlayer) {
     46   ExpectPluginType(
     47       PluginUMAReporter::REALPLAYER, "audio/x-pn-realaudio", GURL("some url"));
     48   ExpectPluginType(PluginUMAReporter::REALPLAYER,
     49                    "audio/x-pn-realaudio-some-sufix",
     50                    GURL("some url"));
     51   ExpectPluginType(PluginUMAReporter::UNSUPPORTED_MIMETYPE,
     52                    "some-prefix-audio/x-pn-realaudio",
     53                    GURL("some url"));
     54 }
     55 
     56 TEST_F(PluginUMATest, Java) {
     57   ExpectPluginType(
     58       PluginUMAReporter::JAVA, "application/x-java-applet", GURL("some url"));
     59   ExpectPluginType(PluginUMAReporter::JAVA,
     60                    "application/x-java-applet-some-sufix",
     61                    GURL("some url"));
     62   ExpectPluginType(PluginUMAReporter::JAVA,
     63                    "some-prefix-application/x-java-applet-sufix",
     64                    GURL("some url"));
     65 }
     66 
     67 TEST_F(PluginUMATest, QuickTime) {
     68   ExpectPluginType(
     69       PluginUMAReporter::QUICKTIME, "video/quicktime", GURL("some url"));
     70   ExpectPluginType(PluginUMAReporter::UNSUPPORTED_MIMETYPE,
     71                    "video/quicktime-sufix",
     72                    GURL("some url"));
     73   ExpectPluginType(PluginUMAReporter::UNSUPPORTED_MIMETYPE,
     74                    "prefix-video/quicktime",
     75                    GURL("some url"));
     76 }
     77 
     78 TEST_F(PluginUMATest, BrowserPlugin) {
     79   ExpectPluginType(PluginUMAReporter::BROWSER_PLUGIN,
     80                    "application/browser-plugin",
     81                    GURL("some url"));
     82   ExpectPluginType(PluginUMAReporter::UNSUPPORTED_MIMETYPE,
     83                    "application/browser-plugin-sufix",
     84                    GURL("some url"));
     85   ExpectPluginType(PluginUMAReporter::UNSUPPORTED_MIMETYPE,
     86                    "prefix-application/browser-plugin",
     87                    GURL("some url"));
     88 }
     89 
     90 TEST_F(PluginUMATest, ShockwaveFlash) {
     91   ExpectPluginType(PluginUMAReporter::SHOCKWAVE_FLASH,
     92                    "application/x-shockwave-flash",
     93                    GURL("some url"));
     94   ExpectPluginType(PluginUMAReporter::SHOCKWAVE_FLASH,
     95                    "application/futuresplash",
     96                    GURL("some url"));
     97   ExpectPluginType(PluginUMAReporter::UNSUPPORTED_MIMETYPE,
     98                    "application/x-futuresplash",
     99                    GURL("some url"));
    100   ExpectPluginType(PluginUMAReporter::UNSUPPORTED_MIMETYPE,
    101                    "application/shockwave-flash",
    102                    GURL("some url"));
    103 }
    104 
    105 TEST_F(PluginUMATest, WidevineCdm) {
    106 #if defined(ENABLE_PEPPER_CDMS)
    107   ExpectPluginType(PluginUMAReporter::WIDEVINE_CDM,
    108 #else
    109   ExpectPluginType(PluginUMAReporter::UNSUPPORTED_MIMETYPE,
    110 #endif
    111                    "application/x-ppapi-widevine-cdm",
    112                    GURL("some url"));
    113   ExpectPluginType(PluginUMAReporter::UNSUPPORTED_MIMETYPE,
    114                    "application/x-ppapi-widevine-cdm-sufix",
    115                    GURL("some url"));
    116   ExpectPluginType(PluginUMAReporter::UNSUPPORTED_MIMETYPE,
    117                    "prefix-application/x-ppapi-widevine-cdm",
    118                    GURL("some url"));
    119 }
    120 
    121 TEST_F(PluginUMATest, BySrcExtension) {
    122   ExpectPluginType(
    123       PluginUMAReporter::QUICKTIME, std::string(), GURL("file://file.mov"));
    124 
    125   // When plugin's mime type is given, we don't check extension.
    126   ExpectPluginType(PluginUMAReporter::UNSUPPORTED_MIMETYPE,
    127                    "unknown-plugin",
    128                    GURL("http://file.mov"));
    129 
    130   ExpectPluginType(PluginUMAReporter::WINDOWS_MEDIA_PLAYER,
    131                    std::string(),
    132                    GURL("file://file.asx"));
    133   ExpectPluginType(
    134       PluginUMAReporter::REALPLAYER, std::string(), GURL("file://file.rm"));
    135   ExpectPluginType(PluginUMAReporter::QUICKTIME,
    136                    std::string(),
    137                    GURL("http://aaa/file.mov?x=aaaa&y=b#c"));
    138   ExpectPluginType(PluginUMAReporter::QUICKTIME,
    139                    std::string(),
    140                    GURL("http://file.mov?x=aaaa&y=b#c"));
    141   ExpectPluginType(PluginUMAReporter::SHOCKWAVE_FLASH,
    142                    std::string(),
    143                    GURL("http://file.swf?x=aaaa&y=b#c"));
    144   ExpectPluginType(PluginUMAReporter::SHOCKWAVE_FLASH,
    145                    std::string(),
    146                    GURL("http://file.spl?x=aaaa&y=b#c"));
    147 
    148   ExpectPluginType(PluginUMAReporter::UNSUPPORTED_EXTENSION,
    149                    std::string(),
    150                    GURL("http://file.unknown_extension"));
    151   ExpectPluginType(
    152       PluginUMAReporter::UNSUPPORTED_EXTENSION, std::string(), GURL("http://"));
    153   ExpectPluginType(
    154       PluginUMAReporter::UNSUPPORTED_EXTENSION, std::string(), GURL("mov"));
    155 }
    156 
    157 TEST_F(PluginUMATest, CaseSensitivity) {
    158   ExpectPluginType(
    159       PluginUMAReporter::QUICKTIME, "video/QUICKTIME", GURL("http://file.aaa"));
    160   ExpectPluginType(
    161       PluginUMAReporter::QUICKTIME, std::string(), GURL("http://file.MoV"));
    162 }
    163