1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "chromeos/app_mode/kiosk_oem_manifest_parser.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/json/json_file_value_serializer.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/values.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace chromeos { 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace { 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kEnterpriseManaged[] = "enterprise_managed"; 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kAllowReset[] = "can_exit_enrollment"; 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kDeviceRequisition[] = "device_requisition"; 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kKeyboardDrivenOobe[] = "keyboard_driven_oobe"; 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)KioskOemManifestParser::Manifest::Manifest() 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : enterprise_managed(false), 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) can_exit_enrollment(true), 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) keyboard_driven_oobe(false) { 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool KioskOemManifestParser::Load( 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& kiosk_oem_file, 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) KioskOemManifestParser::Manifest* manifest) { 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int error_code = JSONFileValueSerializer::JSON_NO_ERROR; 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string error_msg; 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<JSONFileValueSerializer> serializer( 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new JSONFileValueSerializer(kiosk_oem_file)); 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<base::Value> value( 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) serializer->Deserialize(&error_code, &error_msg)); 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue* dict = NULL; 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (error_code != JSONFileValueSerializer::JSON_NO_ERROR || 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) !value.get() || 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) !value->GetAsDictionary(&dict)) { 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return false; 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dict->GetString(kDeviceRequisition, 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &manifest->device_requisition); 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dict->GetBoolean(kKeyboardDrivenOobe, 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &manifest->keyboard_driven_oobe); 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!dict->GetBoolean(kEnterpriseManaged, 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &manifest->enterprise_managed) || 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) !dict->GetBoolean(kAllowReset, 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &manifest->can_exit_enrollment)) { 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return false; 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return true; 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace chromeos 59