1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 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) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_BASE_SCREEN_HANDLER_UTILS_H_ 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_BASE_SCREEN_HANDLER_UTILS_H_ 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <cstddef> 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <string> 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/callback.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/logging.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/values.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace chromeos { 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdochtypedef std::vector<std::string> StringList; 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdochtypedef std::vector<base::string16> String16List; 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)template<typename T> 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct UnwrapConstRef { 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef T Type; 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)template<typename T> 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct UnwrapConstRef<const T&> { 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef T Type; 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool ParseValue(const base::Value* value, bool* out_value); 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool ParseValue(const base::Value* value, int* out_value); 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool ParseValue(const base::Value* value, double* out_value); 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool ParseValue(const base::Value* value, std::string* out_value); 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool ParseValue(const base::Value* value, base::string16* out_value); 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool ParseValue(const base::Value* value, 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::DictionaryValue** out_value); 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool ParseValue(const base::Value* value, StringList* out_value); 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool ParseValue(const base::Value* value, String16List* out_value); 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)template<typename T> 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)inline bool GetArg(const base::ListValue* args, size_t index, T* out_value) { 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::Value* value; 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!args->Get(index, &value)) 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return false; 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return ParseValue(value, out_value); 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbase::FundamentalValue MakeValue(bool v); 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbase::FundamentalValue MakeValue(int v); 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbase::FundamentalValue MakeValue(double v); 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbase::StringValue MakeValue(const std::string& v); 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbase::StringValue MakeValue(const base::string16& v); 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)template<typename T> 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)inline const T& MakeValue(const T& v) { 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return v; 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid CallbackWrapper0(base::Callback<void()> callback, 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::ListValue* args); 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)template<typename A1> 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void CallbackWrapper1(base::Callback<void(A1)> callback, 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::ListValue* args) { 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(args); 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(1u, args->GetSize()); 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typename UnwrapConstRef<A1>::Type arg1; 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!GetArg(args, 0, &arg1)) { 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTREACHED(); 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(arg1); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)template<typename A1, typename A2> 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void CallbackWrapper2(base::Callback<void(A1, A2)> callback, 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::ListValue* args) { 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(args); 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(2u, args->GetSize()); 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typename UnwrapConstRef<A1>::Type arg1; 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typename UnwrapConstRef<A2>::Type arg2; 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!GetArg(args, 0, &arg1) || !GetArg(args, 1, &arg2)) { 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTREACHED(); 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(arg1, arg2); 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)template<typename A1, typename A2, typename A3> 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void CallbackWrapper3(base::Callback<void(A1, A2, A3)> callback, 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::ListValue* args) { 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(args); 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(3u, args->GetSize()); 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typename UnwrapConstRef<A1>::Type arg1; 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typename UnwrapConstRef<A2>::Type arg2; 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typename UnwrapConstRef<A3>::Type arg3; 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!GetArg(args, 0, &arg1) || 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) !GetArg(args, 1, &arg2) || 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) !GetArg(args, 2, &arg3)) { 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTREACHED(); 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(arg1, arg2, arg3); 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)template<typename A1, typename A2, typename A3, typename A4> 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void CallbackWrapper4(base::Callback<void(A1, A2, A3, A4)> callback, 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::ListValue* args) { 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(args); 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(4u, args->GetSize()); 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typename UnwrapConstRef<A1>::Type arg1; 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typename UnwrapConstRef<A2>::Type arg2; 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typename UnwrapConstRef<A3>::Type arg3; 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typename UnwrapConstRef<A4>::Type arg4; 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!GetArg(args, 0, &arg1) || 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) !GetArg(args, 1, &arg2) || 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) !GetArg(args, 2, &arg3) || 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) !GetArg(args, 3, &arg4)) { 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTREACHED(); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(arg1, arg2, arg3, arg4); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace chromeos 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_BASE_SCREEN_HANDLER_UTILS_H_ 129