| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "extensions/common/features/complex_feature.h" | 5 #include "extensions/common/features/complex_feature.h" |
| 6 | 6 |
| 7 #include "chrome/common/extensions/features/chrome_channel_feature_filter.h" | 7 #include "chrome/common/extensions/features/chrome_channel_feature_filter.h" |
| 8 #include "chrome/common/extensions/features/feature_channel.h" | 8 #include "chrome/common/extensions/features/feature_channel.h" |
| 9 #include "extensions/common/features/api_feature.h" | |
| 10 #include "extensions/common/features/simple_feature.h" | 9 #include "extensions/common/features/simple_feature.h" |
| 11 #include "extensions/common/test_util.h" | |
| 12 #include "extensions/common/value_builder.h" | 10 #include "extensions/common/value_builder.h" |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
| 14 | 12 |
| 15 using chrome::VersionInfo; | 13 using chrome::VersionInfo; |
| 16 using extensions::APIFeature; | |
| 17 using extensions::ComplexFeature; | 14 using extensions::ComplexFeature; |
| 18 using extensions::DictionaryBuilder; | 15 using extensions::DictionaryBuilder; |
| 19 using extensions::Feature; | 16 using extensions::Feature; |
| 20 using extensions::ListBuilder; | 17 using extensions::ListBuilder; |
| 21 using extensions::Manifest; | 18 using extensions::Manifest; |
| 22 using extensions::ScopedCurrentChannel; | 19 using extensions::ScopedCurrentChannel; |
| 23 using extensions::SimpleFeature; | 20 using extensions::SimpleFeature; |
| 24 using extensions::test_util::ParseJsonDictionaryWithSingleQuotes; | |
| 25 | 21 |
| 26 namespace { | 22 namespace { |
| 27 | 23 |
| 28 class ExtensionComplexFeatureTest : public testing::Test { | 24 class ExtensionComplexFeatureTest : public testing::Test { |
| 29 protected: | 25 protected: |
| 30 ExtensionComplexFeatureTest() | 26 ExtensionComplexFeatureTest() |
| 31 : current_channel_(VersionInfo::CHANNEL_UNKNOWN) {} | 27 : current_channel_(VersionInfo::CHANNEL_UNKNOWN) {} |
| 32 virtual ~ExtensionComplexFeatureTest() {} | 28 virtual ~ExtensionComplexFeatureTest() {} |
| 33 | 29 |
| 34 SimpleFeature* CreateFeature() { | 30 SimpleFeature* CreateFeature() { |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 EXPECT_NE( | 154 EXPECT_NE( |
| 159 Feature::IS_AVAILABLE, | 155 Feature::IS_AVAILABLE, |
| 160 feature->IsAvailableToManifest("1", | 156 feature->IsAvailableToManifest("1", |
| 161 Manifest::TYPE_EXTENSION, | 157 Manifest::TYPE_EXTENSION, |
| 162 Manifest::INVALID_LOCATION, | 158 Manifest::INVALID_LOCATION, |
| 163 Feature::UNSPECIFIED_PLATFORM, | 159 Feature::UNSPECIFIED_PLATFORM, |
| 164 Feature::GetCurrentPlatform()).result()); | 160 Feature::GetCurrentPlatform()).result()); |
| 165 } | 161 } |
| 166 } | 162 } |
| 167 | 163 |
| 168 // Tests a complex feature with blocked_in_service_worker returns true for | |
| 169 // IsBlockedInServiceWorker(). | |
| 170 TEST_F(ExtensionComplexFeatureTest, BlockedInServiceWorker) { | |
| 171 scoped_ptr<ComplexFeature::FeatureList> features( | |
| 172 new ComplexFeature::FeatureList()); | |
| 173 | |
| 174 // Two feature rules, both with blocked_in_service_worker: true. | |
| 175 scoped_ptr<SimpleFeature> api_feature(new APIFeature()); | |
| 176 api_feature->Parse(ParseJsonDictionaryWithSingleQuotes( | |
| 177 "{" | |
| 178 " 'channel': 'trunk'," | |
| 179 " 'blocked_in_service_worker': true" | |
| 180 "}").get()); | |
| 181 features->push_back(api_feature.release()); | |
| 182 | |
| 183 api_feature.reset(new APIFeature()); | |
| 184 api_feature->Parse(ParseJsonDictionaryWithSingleQuotes( | |
| 185 "{" | |
| 186 " 'channel': 'stable'," | |
| 187 " 'blocked_in_service_worker': true" | |
| 188 "}").get()); | |
| 189 features->push_back(api_feature.release()); | |
| 190 | |
| 191 EXPECT_TRUE(ComplexFeature(features.Pass()).IsBlockedInServiceWorker()); | |
| 192 } | |
| 193 | |
| 194 // Tests a complex feature without blocked_in_service_worker returns false for | |
| 195 // IsBlockedInServiceWorker(). | |
| 196 TEST_F(ExtensionComplexFeatureTest, NotBlockedInServiceWorker) { | |
| 197 scoped_ptr<ComplexFeature::FeatureList> features( | |
| 198 new ComplexFeature::FeatureList()); | |
| 199 | |
| 200 // Two feature rules without blocked_in_service_worker. | |
| 201 scoped_ptr<SimpleFeature> api_feature(new APIFeature()); | |
| 202 api_feature->Parse(ParseJsonDictionaryWithSingleQuotes( | |
| 203 "{" | |
| 204 " 'channel': 'trunk'" | |
| 205 "}").get()); | |
| 206 features->push_back(api_feature.release()); | |
| 207 | |
| 208 api_feature.reset(new APIFeature()); | |
| 209 api_feature->Parse(ParseJsonDictionaryWithSingleQuotes( | |
| 210 "{" | |
| 211 " 'channel': 'stable'" | |
| 212 "}").get()); | |
| 213 features->push_back(api_feature.release()); | |
| 214 | |
| 215 EXPECT_FALSE(ComplexFeature(features.Pass()).IsBlockedInServiceWorker()); | |
| 216 } | |
| 217 | |
| 218 // Tests that dependencies are correctly checked. | 164 // Tests that dependencies are correctly checked. |
| 219 TEST_F(ExtensionComplexFeatureTest, Dependencies) { | 165 TEST_F(ExtensionComplexFeatureTest, Dependencies) { |
| 220 scoped_ptr<ComplexFeature::FeatureList> features( | 166 scoped_ptr<ComplexFeature::FeatureList> features( |
| 221 new ComplexFeature::FeatureList()); | 167 new ComplexFeature::FeatureList()); |
| 222 | 168 |
| 223 // Rule which depends on an extension-only feature (omnibox). | 169 // Rule which depends on an extension-only feature (omnibox). |
| 224 scoped_ptr<SimpleFeature> simple_feature(CreateFeature()); | 170 scoped_ptr<SimpleFeature> simple_feature(CreateFeature()); |
| 225 scoped_ptr<base::DictionaryValue> rule = | 171 scoped_ptr<base::DictionaryValue> rule = |
| 226 DictionaryBuilder() | 172 DictionaryBuilder() |
| 227 .Set("dependencies", ListBuilder().Append("manifest:omnibox")) | 173 .Set("dependencies", ListBuilder().Append("manifest:omnibox")) |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 EXPECT_EQ( | 207 EXPECT_EQ( |
| 262 Feature::INVALID_TYPE, | 208 Feature::INVALID_TYPE, |
| 263 feature->IsAvailableToManifest("hostedappid", | 209 feature->IsAvailableToManifest("hostedappid", |
| 264 Manifest::TYPE_HOSTED_APP, | 210 Manifest::TYPE_HOSTED_APP, |
| 265 Manifest::INVALID_LOCATION, | 211 Manifest::INVALID_LOCATION, |
| 266 Feature::UNSPECIFIED_PLATFORM, | 212 Feature::UNSPECIFIED_PLATFORM, |
| 267 Feature::GetCurrentPlatform()).result()); | 213 Feature::GetCurrentPlatform()).result()); |
| 268 } | 214 } |
| 269 | 215 |
| 270 } // namespace | 216 } // namespace |
| OLD | NEW |