Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(46)

Side by Side Diff: chrome/browser/devtools/list_value_parser.h

Issue 22972007: Migrate DevToolsWindow from specific to opaque frontend host messages (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/devtools/devtools_window.cc ('k') | chrome/chrome.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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 #include "base/bind.h"
6 #include "base/callback.h"
7 #include "base/values.h"
8
9 #ifndef CHROME_BROWSER_DEVTOOLS_LIST_VALUE_PARSER_H_
10 #define CHROME_BROWSER_DEVTOOLS_LIST_VALUE_PARSER_H_
11
12 namespace internal {
pfeldman 2013/08/23 11:29:43 Use anonymous namespace
Vladislav Kaznacheev 2013/08/23 13:44:17 Done.
13
14 bool GetValue(const base::ListValue& list, int pos, std::string& value) {
15 return list.GetString(pos, &value);
16 }
17
18 bool GetValue(const base::ListValue& list, int pos, int& value) {
19 return list.GetInteger(pos, &value);
20 }
21
22 bool GetValue(const base::ListValue& list, int pos, bool& value) {
23 return list.GetBoolean(pos, &value);
24 }
25
26 template <typename T>
27 struct StorageTraits {
28 typedef T StorageType;
29 };
30
31 template <typename T>
32 struct StorageTraits<const T&> {
33 typedef T StorageType;
34 };
35
36 template <class A>
37 class Argument {
38 public:
39 typedef typename StorageTraits<A>::StorageType ValueType;
40
41 Argument(const base::ListValue& list, int pos) {
42 valid_ = GetValue(list, pos, value_);
43 }
44
45 ValueType value() const { return value_; }
46 bool valid() const { return valid_; }
47
48 private:
49 ValueType value_;
50 bool valid_;
51 };
52
53 bool ParseAndHandle0(const base::Callback<void(void)>& handler,
54 const base::ListValue& list) {
55 handler.Run();
56 return true;
57 }
58
59 template <class A1>
60 bool ParseAndHandle1(const base::Callback<void(A1)>& handler,
61 const base::ListValue& list) {
62 if (list.GetSize() != 1)
63 return false;
64 Argument<A1> arg1(list, 0);
65 if (!arg1.valid())
66 return false;
67 handler.Run(arg1.value());
68 return true;
69 }
70
71 template <class A1, class A2>
72 bool ParseAndHandle2(const base::Callback<void(A1, A2)>& handler,
73 const base::ListValue& list) {
74 if (list.GetSize() != 2)
75 return false;
76 Argument<A1> arg1(list, 0);
77 if (!arg1.valid())
78 return false;
79 Argument<A2> arg2(list, 1);
80 if (!arg2.valid())
81 return false;
82 handler.Run(arg1.value(), arg2.value());
83 return true;
84 }
85
86 template <class A1, class A2, class A3>
87 bool ParseAndHandle3(const base::Callback<void(A1, A2, A3)>& handler,
88 const base::ListValue& list) {
89 if (list.GetSize() != 3)
90 return false;
91 Argument<A1> arg1(list, 0);
92 if (!arg1.valid())
93 return false;
94 Argument<A2> arg2(list, 1);
95 if (!arg2.valid())
96 return false;
97 Argument<A3> arg3(list, 2);
98 if (!arg3.valid())
99 return false;
100 handler.Run(arg1.value(), arg2.value(), arg3.value());
101 return true;
102 }
103
104 } // namespace internal
105
106 typedef base::Callback<bool(const base::ListValue&)> ListValueParser;
107
108 ListValueParser BindToListParser(const base::Callback<void()>& handler) {
109 return base::Bind(&internal::ParseAndHandle0, handler);
110 }
111
112 template <class A1>
113 ListValueParser BindToListParser(const base::Callback<void(A1)>& handler) {
114 return base::Bind(&internal::ParseAndHandle1<A1>, handler);
115 }
116
117 template <class A1, class A2>
118 ListValueParser BindToListParser(const base::Callback<void(A1,A2)>& handler) {
119 return base::Bind(&internal::ParseAndHandle2<A1, A2>, handler);
120 }
121
122 template <class A1, class A2, class A3>
123 ListValueParser BindToListParser(
124 const base::Callback<void(A1,A2,A3)>& handler) {
125 return base::Bind(&internal::ParseAndHandle3<A1, A2, A3>, handler);
126 }
127
128 #endif // CHROME_BROWSER_DEVTOOLS_LIST_VALUE_PARSER_H_
OLDNEW
« no previous file with comments | « chrome/browser/devtools/devtools_window.cc ('k') | chrome/chrome.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698