1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "extensions/common/features/manifest_feature.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "extensions/common/manifest.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ManifestFeature::ManifestFeature() { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ManifestFeature::~ManifestFeature() { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Feature::Availability ManifestFeature::IsAvailableToContext( 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension, 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Feature::Context context, 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& url, 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Feature::Platform platform) const { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Availability availability = SimpleFeature::IsAvailableToContext(extension, 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) context, 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url, 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) platform); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!availability.is_available()) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return availability; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We know we can skip manifest()->GetKey() here because we just did the same 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // validation it would do above. 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (extension && !extension->manifest()->value()->HasKey(name())) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CreateAvailability(NOT_PRESENT, extension->GetType()); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CreateAvailability(IS_AVAILABLE); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)std::string ManifestFeature::Parse(const base::DictionaryValue* value) { 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string error = SimpleFeature::Parse(value); 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!error.empty()) 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return error; 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (extension_types()->empty()) { 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return name() + ": Manifest features must specify at least one " + 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "value for extension_types."; 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (value->HasKey("contexts")) 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return name() + ": Manifest features do not support contexts."; 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return std::string(); 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} // namespace extensions 54