| Index: chrome/common/extensions/api/extension_api_unittest.cc | 
| diff --git a/chrome/common/extensions/api/extension_api_unittest.cc b/chrome/common/extensions/api/extension_api_unittest.cc | 
| index e25adb0768bca746cf486fcec4e3cb29ad7c57a5..ff0de63e59583f9b1a887e67993f612be65b8d8a 100644 | 
| --- a/chrome/common/extensions/api/extension_api_unittest.cc | 
| +++ b/chrome/common/extensions/api/extension_api_unittest.cc | 
| @@ -99,13 +99,16 @@ TEST(ExtensionAPI, IsPrivileged) { | 
| EXPECT_FALSE(extension_api->IsPrivileged("extension.connect")); | 
| EXPECT_FALSE(extension_api->IsPrivileged("extension.onConnect")); | 
|  | 
| -  // Properties are not supported yet. | 
| -  EXPECT_TRUE(extension_api->IsPrivileged("extension.lastError")); | 
| +  // Properties are not supported yet, but the default for this module is | 
| +  // unprivileged, so that's what we see. | 
| +  EXPECT_FALSE(extension_api->IsPrivileged("extension.lastError")); | 
|  | 
| -  // Default unknown names to privileged for paranoia's sake. | 
| +  // Default unknown modules to privileged for paranoia's sake. | 
| EXPECT_TRUE(extension_api->IsPrivileged("")); | 
| EXPECT_TRUE(extension_api->IsPrivileged("<unknown-namespace>")); | 
| -  EXPECT_TRUE(extension_api->IsPrivileged("extension.<unknown-member>")); | 
| + | 
| +  // Default unknown names within a module to the parent's value. | 
| +  EXPECT_FALSE(extension_api->IsPrivileged("extension.<unknown-member>")); | 
|  | 
| // Exists, but privileged. | 
| EXPECT_TRUE(extension_api->IsPrivileged("extension.getViews")); | 
| @@ -134,11 +137,14 @@ TEST(ExtensionAPI, IsPrivilegedFeatures) { | 
| Feature::UNSPECIFIED_CONTEXT }, | 
| { "is_privileged_features_3.json", "test", false, | 
| Feature::UNSPECIFIED_CONTEXT }, | 
| -    { "is_privileged_features_4.json", "test.bar", false, | 
| -      Feature::UNSPECIFIED_CONTEXT }, | 
| { "is_privileged_features_5.json", "test.bar", true, | 
| Feature::BLESSED_EXTENSION_CONTEXT }, | 
| -    { "is_privileged_features_5.json", "test.bar", false, | 
| +    // These are privileged because a child always depends on its parent. So | 
| +    // even if the child is more permissive than its parent, it still ends up | 
| +    // having the same requirements. | 
| +    { "is_privileged_features_4.json", "test.bar", true, | 
| +      Feature::UNSPECIFIED_CONTEXT }, | 
| +    { "is_privileged_features_5.json", "test.bar", true, | 
| Feature::UNBLESSED_EXTENSION_CONTEXT } | 
| }; | 
|  | 
| @@ -350,71 +356,5 @@ TEST(ExtensionAPI, GetAPINameFromFullName) { | 
| } | 
| } | 
|  | 
| -TEST(ExtensionAPI, DefaultConfigurationFeatures) { | 
| -  scoped_ptr<ExtensionAPI> api(ExtensionAPI::CreateWithDefaultConfiguration()); | 
| - | 
| -  Feature* bookmarks = api->GetFeature("bookmarks"); | 
| -  Feature* bookmarks_create = api->GetFeature("bookmarks.create"); | 
| - | 
| -  struct { | 
| -    Feature* feature; | 
| -    // TODO(aa): More stuff to test over time. | 
| -  } test_data[] = { | 
| -    { bookmarks }, | 
| -    { bookmarks_create } | 
| -  }; | 
| - | 
| -  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { | 
| -    Feature* feature = test_data[i].feature; | 
| -    ASSERT_TRUE(feature) << i; | 
| - | 
| -    EXPECT_TRUE(feature->whitelist()->empty()); | 
| -    EXPECT_TRUE(feature->extension_types()->empty()); | 
| - | 
| -    EXPECT_EQ(1u, feature->contexts()->size()); | 
| -    EXPECT_TRUE(feature->contexts()->count( | 
| -        Feature::BLESSED_EXTENSION_CONTEXT)); | 
| - | 
| -    EXPECT_EQ(Feature::UNSPECIFIED_LOCATION, feature->location()); | 
| -    EXPECT_EQ(Feature::UNSPECIFIED_PLATFORM, feature->platform()); | 
| -    EXPECT_EQ(0, feature->min_manifest_version()); | 
| -    EXPECT_EQ(0, feature->max_manifest_version()); | 
| -  } | 
| -} | 
| - | 
| -TEST(ExtensionAPI, FeaturesRequireContexts) { | 
| -  scoped_ptr<ListValue> schema1(new ListValue()); | 
| -  DictionaryValue* feature_definition = new DictionaryValue(); | 
| -  schema1->Append(feature_definition); | 
| -  feature_definition->SetString("namespace", "test"); | 
| -  feature_definition->SetBoolean("uses_feature_system", true); | 
| - | 
| -  scoped_ptr<ListValue> schema2(schema1->DeepCopy()); | 
| - | 
| -  ListValue* contexts = new ListValue(); | 
| -  contexts->Append(Value::CreateStringValue("content_script")); | 
| -  feature_definition->Set("contexts", contexts); | 
| - | 
| -  struct { | 
| -    ListValue* schema; | 
| -    bool expect_success; | 
| -  } test_data[] = { | 
| -    { schema1.get(), true }, | 
| -    { schema2.get(), false } | 
| -  }; | 
| - | 
| -  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { | 
| -    std::string schema_source; | 
| -    base::JSONWriter::Write(test_data[i].schema, &schema_source); | 
| - | 
| -    ExtensionAPI api; | 
| -    api.RegisterSchema("test", base::StringPiece(schema_source)); | 
| -    api.LoadAllSchemas(); | 
| - | 
| -    Feature* feature = api.GetFeature("test"); | 
| -    EXPECT_EQ(test_data[i].expect_success, feature != NULL) << i; | 
| -  } | 
| -} | 
| - | 
| }  // namespace | 
| }  // namespace extensions | 
|  |