Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / webui / chromeos / login / base_screen_handler_utils.h
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_BASE_SCREEN_HANDLER_UTILS_H_
6 #define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_BASE_SCREEN_HANDLER_UTILS_H_
7
8 #include <cstddef>
9 #include <string>
10
11 #include "base/callback.h"
12 #include "base/logging.h"
13 #include "base/strings/string16.h"
14 #include "base/values.h"
15
16 namespace chromeos {
17
18 typedef std::vector<std::string> StringList;
19 typedef std::vector<base::string16> String16List;
20
21 template<typename T>
22 struct UnwrapConstRef {
23   typedef T Type;
24 };
25
26 template<typename T>
27 struct UnwrapConstRef<const T&> {
28   typedef T Type;
29 };
30
31 bool ParseValue(const base::Value* value, bool* out_value);
32 bool ParseValue(const base::Value* value, int* out_value);
33 bool ParseValue(const base::Value* value, double* out_value);
34 bool ParseValue(const base::Value* value, std::string* out_value);
35 bool ParseValue(const base::Value* value, base::string16* out_value);
36 bool ParseValue(const base::Value* value,
37                 const base::DictionaryValue** out_value);
38 bool ParseValue(const base::Value* value, StringList* out_value);
39 bool ParseValue(const base::Value* value, String16List* out_value);
40
41 template<typename T>
42 inline bool GetArg(const base::ListValue* args, size_t index, T* out_value) {
43   const base::Value* value;
44   if (!args->Get(index, &value))
45     return false;
46   return ParseValue(value, out_value);
47 }
48
49 base::FundamentalValue MakeValue(bool v);
50 base::FundamentalValue MakeValue(int v);
51 base::FundamentalValue MakeValue(double v);
52 base::StringValue MakeValue(const std::string& v);
53 base::StringValue MakeValue(const base::string16& v);
54
55 template<typename T>
56 inline const T& MakeValue(const T& v) {
57   return v;
58 }
59
60 void CallbackWrapper0(base::Callback<void()> callback,
61                       const base::ListValue* args);
62
63 template<typename A1>
64 void CallbackWrapper1(base::Callback<void(A1)> callback,
65                       const base::ListValue* args) {
66   DCHECK(args);
67   DCHECK_EQ(1u, args->GetSize());
68   typename UnwrapConstRef<A1>::Type arg1;
69   if (!GetArg(args, 0, &arg1)) {
70     NOTREACHED();
71     return;
72   }
73   callback.Run(arg1);
74 }
75
76 template<typename A1, typename A2>
77 void CallbackWrapper2(base::Callback<void(A1, A2)> callback,
78                       const base::ListValue* args) {
79   DCHECK(args);
80   DCHECK_EQ(2u, args->GetSize());
81   typename UnwrapConstRef<A1>::Type arg1;
82   typename UnwrapConstRef<A2>::Type arg2;
83   if (!GetArg(args, 0, &arg1) || !GetArg(args, 1, &arg2)) {
84     NOTREACHED();
85     return;
86   }
87   callback.Run(arg1, arg2);
88 }
89
90 template<typename A1, typename A2, typename A3>
91 void CallbackWrapper3(base::Callback<void(A1, A2, A3)> callback,
92                       const base::ListValue* args) {
93   DCHECK(args);
94   DCHECK_EQ(3u, args->GetSize());
95   typename UnwrapConstRef<A1>::Type arg1;
96   typename UnwrapConstRef<A2>::Type arg2;
97   typename UnwrapConstRef<A3>::Type arg3;
98   if (!GetArg(args, 0, &arg1) ||
99       !GetArg(args, 1, &arg2) ||
100       !GetArg(args, 2, &arg3)) {
101     NOTREACHED();
102     return;
103   }
104   callback.Run(arg1, arg2, arg3);
105 }
106
107 template<typename A1, typename A2, typename A3, typename A4>
108 void CallbackWrapper4(base::Callback<void(A1, A2, A3, A4)> callback,
109                       const base::ListValue* args) {
110   DCHECK(args);
111   DCHECK_EQ(4u, args->GetSize());
112   typename UnwrapConstRef<A1>::Type arg1;
113   typename UnwrapConstRef<A2>::Type arg2;
114   typename UnwrapConstRef<A3>::Type arg3;
115   typename UnwrapConstRef<A4>::Type arg4;
116   if (!GetArg(args, 0, &arg1) ||
117       !GetArg(args, 1, &arg2) ||
118       !GetArg(args, 2, &arg3) ||
119       !GetArg(args, 3, &arg4)) {
120     NOTREACHED();
121     return;
122   }
123   callback.Run(arg1, arg2, arg3, arg4);
124 }
125
126 }  // namespace chromeos
127
128 #endif  // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_BASE_SCREEN_HANDLER_UTILS_H_