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