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