1 // Copyright (c) 2012 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 "chrome/browser/plugins/plugin_metadata.h"
6 
7 #include "base/strings/utf_string_conversions.h"
8 #include "content/public/common/webplugininfo.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 
11 namespace {
12 
GetSecurityStatus(PluginMetadata * plugin_metadata,const char * version)13 PluginMetadata::SecurityStatus GetSecurityStatus(
14     PluginMetadata* plugin_metadata,
15     const char* version) {
16   content::WebPluginInfo plugin(
17       base::ASCIIToUTF16("Foo plugin"),
18       base::FilePath(FILE_PATH_LITERAL("/tmp/plugin.so")),
19       base::ASCIIToUTF16(version),
20       base::ASCIIToUTF16("Foo plugin."));
21   return plugin_metadata->GetSecurityStatus(plugin);
22 }
23 
24 }  // namespace
25 
TEST(PluginMetadataTest,SecurityStatus)26 TEST(PluginMetadataTest, SecurityStatus) {
27   const PluginMetadata::SecurityStatus kUpToDate =
28       PluginMetadata::SECURITY_STATUS_UP_TO_DATE;
29   const PluginMetadata::SecurityStatus kOutOfDate =
30       PluginMetadata::SECURITY_STATUS_OUT_OF_DATE;
31   const PluginMetadata::SecurityStatus kRequiresAuthorization =
32       PluginMetadata::SECURITY_STATUS_REQUIRES_AUTHORIZATION;
33 
34   PluginMetadata plugin_metadata(
35       "claybrick-writer", base::ASCIIToUTF16("ClayBrick Writer"), true, GURL(),
36       GURL(), base::ASCIIToUTF16("ClayBrick"), std::string(),
37       false /* plugin_is_deprecated */);
38 
39   EXPECT_EQ(kRequiresAuthorization,
40             GetSecurityStatus(&plugin_metadata, "1.2.3"));
41 
42   plugin_metadata.AddVersion(base::Version("9.4.1"), kRequiresAuthorization);
43   plugin_metadata.AddVersion(base::Version("10"), kOutOfDate);
44   plugin_metadata.AddVersion(base::Version("10.2.1"), kUpToDate);
45 
46   EXPECT_FALSE(plugin_metadata.plugin_is_deprecated());
47 
48   // Invalid version.
49   EXPECT_EQ(kOutOfDate, GetSecurityStatus(&plugin_metadata, "foo"));
50 
51   EXPECT_EQ(kOutOfDate, GetSecurityStatus(&plugin_metadata, "0"));
52   EXPECT_EQ(kOutOfDate, GetSecurityStatus(&plugin_metadata, "1.2.3"));
53   EXPECT_EQ(kRequiresAuthorization,
54             GetSecurityStatus(&plugin_metadata, "9.4.1"));
55   EXPECT_EQ(kRequiresAuthorization,
56             GetSecurityStatus(&plugin_metadata, "9.4.2"));
57   EXPECT_EQ(kOutOfDate, GetSecurityStatus(&plugin_metadata, "10.2.0"));
58   EXPECT_EQ(kUpToDate, GetSecurityStatus(&plugin_metadata, "10.2.1"));
59   EXPECT_EQ(kUpToDate, GetSecurityStatus(&plugin_metadata, "11"));
60 }
61 
TEST(PluginMetadataTest,DeprecatedSecurityStatus)62 TEST(PluginMetadataTest, DeprecatedSecurityStatus) {
63   PluginMetadata plugin_metadata(
64       "claybrick-writer", base::ASCIIToUTF16("ClayBrick Writer"), true, GURL(),
65       GURL(), base::ASCIIToUTF16("ClayBrick"), std::string(),
66       true /* plugin_is_deprecated */);
67 
68   // It doesn't really matter what's in the versions field of a deprecated
69   // plugin. But canonically, we would expect exactly one version:
70   // Version "0" marked "out_of_date".
71   plugin_metadata.AddVersion(base::Version("0"),
72                              PluginMetadata::SECURITY_STATUS_OUT_OF_DATE);
73 
74   EXPECT_TRUE(plugin_metadata.plugin_is_deprecated());
75 
76   // All versions should be considered out of date for deprecated plugins.
77   EXPECT_EQ(PluginMetadata::SECURITY_STATUS_DEPRECATED,
78             GetSecurityStatus(&plugin_metadata, "foo"));
79   EXPECT_EQ(PluginMetadata::SECURITY_STATUS_DEPRECATED,
80             GetSecurityStatus(&plugin_metadata, "0"));
81   EXPECT_EQ(PluginMetadata::SECURITY_STATUS_DEPRECATED,
82             GetSecurityStatus(&plugin_metadata, "1.2.3"));
83 }
84