Add new certificateProvider extension API.
[chromium-blink-merge.git] / chrome / common / mac / cfbundle_blocker_unittest.mm
blob2e23fe282a71358d89a3ed678fc7379846c38c7b
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.
5 #include "chrome/common/mac/cfbundle_blocker.h"
7 #import <Foundation/Foundation.h>
9 #include "base/basictypes.h"
10 #include "testing/gtest/include/gtest/gtest.h"
12 namespace chrome {
13 namespace common {
14 namespace mac {
15 namespace {
17 struct IsBundleAllowedTestcase {
18   NSString* bundle_id;
19   NSString* version;
20   bool allowed;
23 TEST(CFBundleBlockerTest, IsBundleAllowed) {
24   const IsBundleAllowedTestcase kTestcases[] = {
25     // Block things without a bundle ID.
26     { nil, nil, false },
28     // Block bundle IDs that aren't in the whitelist.
29     { @"org.chromium.Chromium.evil", nil, false },
31     // The AllowedBundle structure for Google Authetnicator BT doesn't
32     // require a version, so this should work equally well with any version
33     // including no version at all.
34     { @"com.google.osax.Google_Authenticator_BT", nil, true },
35     { @"com.google.osax.Google_Authenticator_BT", @"0.5.0.0", true },
37     // Typos should be blocked.
38     { @"com.google.osax.Google_Authenticator_B", nil, false },
39     { @"com.google.osax.Google_Authenticator_BQ", nil, false },
40     { @"com.google.osax.Google_Authenticator_BTQ", nil, false },
41     { @"com.google.osax", nil, false },
42     { @"com.google", nil, false },
43     { @"com", nil, false },
44     { @"", nil, false },
46     // MySpeed requires a version, so make sure that versions below don't work
47     // and versions above do.
48     { @"com.enounce.MySpeed.osax", nil, false },
49     { @"com.enounce.MySpeed.osax", @"", false },
50     { @"com.enounce.MySpeed.osax", @"1200", false },
51     { @"com.enounce.MySpeed.osax", @"1201", true },
52     { @"com.enounce.MySpeed.osax", @"1202", true },
54     // DefaultFolderX is whitelisted as com.stclairsoft.DefaultFolderX. Make
55     // sure that "child" IDs such as com.stclairsoft.DefaultFolderX.osax work.
56     // It uses a dotted versioning scheme, so test the version comparator out.
57     { @"com.stclairsoft.DefaultFolderX.osax", nil, false },
58     { @"com.stclairsoft.DefaultFolderX.osax", @"", false },
59     { @"com.stclairsoft.DefaultFolderX.osax", @"3.5.4", false },
60     { @"com.stclairsoft.DefaultFolderX.osax", @"4.3.4", false },
61     { @"com.stclairsoft.DefaultFolderX.osax", @"4.4.2", false },
62     { @"com.stclairsoft.DefaultFolderX.osax", @"4.4.3", true },
63     { @"com.stclairsoft.DefaultFolderX.osax", @"4.4.4", true },
64     { @"com.stclairsoft.DefaultFolderX.osax", @"4.4.10", true },
65     { @"com.stclairsoft.DefaultFolderX.osax", @"4.5", true },
66     { @"com.stclairsoft.DefaultFolderX.osax", @"4.5.2", true },
67     { @"com.stclairsoft.DefaultFolderX.osax", @"4.10", true },
68     { @"com.stclairsoft.DefaultFolderX.osax", @"4.10.2", true },
69     { @"com.stclairsoft.DefaultFolderX.osax", @"5", true },
70     { @"com.stclairsoft.DefaultFolderX.osax", @"5.3", true },
71     { @"com.stclairsoft.DefaultFolderX.osax", @"5.3.2", true },
73     // Other "child" IDs that might want to load.
74     { @"com.stclairsoft.DefaultFolderX.CarbonPatcher", @"4.4.3", true },
75     { @"com.stclairsoft.DefaultFolderX.CocoaPatcher", @"4.4.3", true },
76   };
78   for (size_t index = 0; index < arraysize(kTestcases); ++index) {
79     const IsBundleAllowedTestcase& testcase = kTestcases[index];
80     NSString* bundle_id = testcase.bundle_id;
81     NSString* version = testcase.version;
82     NSString* version_print = version ? version : @"(nil)";
83     EXPECT_EQ(testcase.allowed, IsBundleAllowed(bundle_id, version))
84         << "index " << index
85         << ", bundle_id " << [bundle_id UTF8String]
86         << ", version " << [version_print UTF8String];
87   }
90 }  // namespace
91 }  // namespace mac
92 }  // namespace common
93 }  // namespace chrome