Home | History | Annotate | Download | only in mac
      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 
     12 namespace chrome {
     13 namespace common {
     14 namespace mac {
     15 namespace {
     16 
     17 struct IsBundleAllowedTestcase {
     18   NSString* bundle_id;
     19   NSString* version;
     20   bool allowed;
     21 };
     22 
     23 TEST(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