• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "chrome/common/mac/cfbundle_blocker.h"
6
7#import <Foundation/Foundation.h>
8
9#include "base/basictypes.h"
10#include "testing/gtest/include/gtest/gtest.h"
11
12namespace chrome {
13namespace common {
14namespace mac {
15namespace {
16
17struct IsBundleAllowedTestcase {
18  NSString* bundle_id;
19  NSString* version;
20  bool allowed;
21};
22
23TEST(CFBundleBlockerTest, IsBundleAllowed) {
24  const IsBundleAllowedTestcase kTestcases[] = {
25    // Block things without a bundle ID.
26    { nil, nil, false },
27
28    // Block bundle IDs that aren't in the whitelist.
29    { @"org.chromium.Chromium.evil", nil, false },
30
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 },
36
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 },
45
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 },
53
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 },
72
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  };
77
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  }
88}
89
90}  // namespace
91}  // namespace mac
92}  // namespace common
93}  // namespace chrome
94