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

Side by Side Diff: chrome/browser/devtools/devtools_embedder_message_dispatcher.cc

Issue 912863002: [DevTools] Remote JSON requests from javascript (Chromium side) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/devtools/devtools_embedder_message_dispatcher.h" 5 #include "chrome/browser/devtools/devtools_embedder_message_dispatcher.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/values.h" 8 #include "base/values.h"
9 9
10 namespace { 10 namespace {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 template <typename H, typename... As> 58 template <typename H, typename... As>
59 void Apply(const H& handler, As... args) { 59 void Apply(const H& handler, As... args) {
60 handler.Run(args...); 60 handler.Run(args...);
61 } 61 }
62 }; 62 };
63 63
64 template <typename T, typename... Ts> 64 template <typename T, typename... Ts>
65 struct ParamTuple<T, Ts...> { 65 struct ParamTuple<T, Ts...> {
66 bool Parse(const base::ListValue& list, 66 bool Parse(const base::ListValue& list,
67 const base::ListValue::const_iterator& it) { 67 const base::ListValue::const_iterator& it) {
68 if (it == list.end()) 68 return it != list.end() && GetValue(*it, &head) && tail.Parse(list, it + 1);
69 return false;
70 if (!GetValue(*it, &head))
71 return false;
72 return tail.Parse(list, it + 1);
73 } 69 }
74 70
75 template <typename H, typename... As> 71 template <typename H, typename... As>
76 void Apply(const H& handler, As... args) { 72 void Apply(const H& handler, As... args) {
77 tail.template Apply<H, As..., T>(handler, args..., head); 73 tail.template Apply<H, As..., T>(handler, args..., head);
78 } 74 }
79 75
80 typename StorageTraits<T>::StorageType head; 76 typename StorageTraits<T>::StorageType head;
81 ParamTuple<Ts...> tail; 77 ParamTuple<Ts...> tail;
82 }; 78 };
83 79
84 template<typename... As> 80 template<typename... As>
85 bool ParseAndHandle(const base::Callback<void(As...)>& handler, 81 void ParseAndHandle(const base::Callback<void(int, As...)>& handler,
82 int request_id,
86 const base::ListValue& list) { 83 const base::ListValue& list) {
87 ParamTuple<As...> tuple; 84 ParamTuple<As...> tuple;
88 if (!tuple.Parse(list, list.begin())) 85 if (tuple.Parse(list, list.begin()))
89 return false; 86 tuple.Apply(handler, request_id);
90 tuple.Apply(handler);
91 return true;
92 } 87 }
93 88
94 } // namespace 89 } // namespace
95 90
96 /** 91 /**
97 * Dispatcher for messages sent from the frontend running in an 92 * Dispatcher for messages sent from the frontend running in an
98 * isolated renderer (chrome-devtools:// or chrome://inspect) to the embedder 93 * isolated renderer (chrome-devtools:// or chrome://inspect) to the embedder
99 * in the browser. 94 * in the browser.
100 * 95 *
101 * The messages are sent via InspectorFrontendHost.sendMessageToEmbedder or 96 * The messages are sent via InspectorFrontendHost.sendMessageToEmbedder or
102 * chrome.send method accordingly. 97 * chrome.send method accordingly.
103 */ 98 */
104 class DispatcherImpl : public DevToolsEmbedderMessageDispatcher { 99 class DispatcherImpl : public DevToolsEmbedderMessageDispatcher {
105 public: 100 public:
106 ~DispatcherImpl() override {} 101 ~DispatcherImpl() override {}
107 102
108 bool Dispatch(const std::string& method, 103 void Dispatch(int request_id,
109 const base::ListValue* params, 104 const std::string& method,
110 std::string* error) override { 105 const base::ListValue* params) override {
111 HandlerMap::iterator it = handlers_.find(method); 106 HandlerMap::iterator it = handlers_.find(method);
112 if (it == handlers_.end()) 107 if (it != handlers_.end())
113 return false; 108 it->second.Run(request_id, *params);
114
115 if (it->second.Run(*params))
116 return true;
117
118 if (error)
119 *error = "Invalid frontend host message parameters: " + method;
120 return false;
121 }
122
123 typedef base::Callback<bool(const base::ListValue&)> Handler;
124 void RegisterHandler(const std::string& method, const Handler& handler) {
125 handlers_[method] = handler;
126 } 109 }
127 110
128 template<typename T, typename... As> 111 template<typename T, typename... As>
129 void RegisterHandler(const std::string& method, 112 void RegisterHandler(const std::string& method,
130 void (T::*handler)(As...), T* delegate) { 113 void (T::*handler)(int, As...), T* delegate) {
131 handlers_[method] = base::Bind(&ParseAndHandle<As...>, 114 handlers_[method] = base::Bind(&ParseAndHandle<As...>,
132 base::Bind(handler, 115 base::Bind(handler,
133 base::Unretained(delegate))); 116 base::Unretained(delegate)));
134 } 117 }
135 118
136 private: 119 private:
137 typedef std::map<std::string, Handler> HandlerMap; 120 using Handler = base::Callback<void(int, const base::ListValue&)>;
121 using HandlerMap = std::map<std::string, Handler>;
138 HandlerMap handlers_; 122 HandlerMap handlers_;
139 }; 123 };
140 124
141 125 // static
142 DevToolsEmbedderMessageDispatcher* 126 DevToolsEmbedderMessageDispatcher*
143 DevToolsEmbedderMessageDispatcher::createForDevToolsFrontend( 127 DevToolsEmbedderMessageDispatcher::CreateForDevToolsFrontend(
144 Delegate* delegate) { 128 Delegate* delegate) {
145 DispatcherImpl* d = new DispatcherImpl(); 129 DispatcherImpl* d = new DispatcherImpl();
146 130
147 d->RegisterHandler("bringToFront", &Delegate::ActivateWindow, delegate); 131 d->RegisterHandler("bringToFront", &Delegate::ActivateWindow, delegate);
148 d->RegisterHandler("closeWindow", &Delegate::CloseWindow, delegate); 132 d->RegisterHandler("closeWindow", &Delegate::CloseWindow, delegate);
149 d->RegisterHandler("loadCompleted", &Delegate::LoadCompleted, delegate); 133 d->RegisterHandler("loadCompleted", &Delegate::LoadCompleted, delegate);
150 d->RegisterHandler("setInspectedPageBounds", 134 d->RegisterHandler("setInspectedPageBounds",
151 &Delegate::SetInspectedPageBounds, delegate); 135 &Delegate::SetInspectedPageBounds, delegate);
152 d->RegisterHandler("inspectElementCompleted", 136 d->RegisterHandler("inspectElementCompleted",
153 &Delegate::InspectElementCompleted, delegate); 137 &Delegate::InspectElementCompleted, delegate);
154 d->RegisterHandler("inspectedURLChanged", 138 d->RegisterHandler("inspectedURLChanged",
(...skipping 17 matching lines...) Expand all
172 d->RegisterHandler("zoomOut", &Delegate::ZoomOut, delegate); 156 d->RegisterHandler("zoomOut", &Delegate::ZoomOut, delegate);
173 d->RegisterHandler("resetZoom", &Delegate::ResetZoom, delegate); 157 d->RegisterHandler("resetZoom", &Delegate::ResetZoom, delegate);
174 d->RegisterHandler("openUrlOnRemoteDeviceAndInspect", 158 d->RegisterHandler("openUrlOnRemoteDeviceAndInspect",
175 &Delegate::OpenUrlOnRemoteDeviceAndInspect, delegate); 159 &Delegate::OpenUrlOnRemoteDeviceAndInspect, delegate);
176 d->RegisterHandler("setDeviceCountUpdatesEnabled", 160 d->RegisterHandler("setDeviceCountUpdatesEnabled",
177 &Delegate::SetDeviceCountUpdatesEnabled, delegate); 161 &Delegate::SetDeviceCountUpdatesEnabled, delegate);
178 d->RegisterHandler("setDevicesUpdatesEnabled", 162 d->RegisterHandler("setDevicesUpdatesEnabled",
179 &Delegate::SetDevicesUpdatesEnabled, delegate); 163 &Delegate::SetDevicesUpdatesEnabled, delegate);
180 d->RegisterHandler("sendMessageToBrowser", 164 d->RegisterHandler("sendMessageToBrowser",
181 &Delegate::SendMessageToBrowser, delegate); 165 &Delegate::SendMessageToBrowser, delegate);
182 d->RegisterHandler("recordActionUMA", 166 d->RegisterHandler("recordActionUMA", &Delegate::RecordActionUMA, delegate);
183 &Delegate::RecordActionUMA, delegate); 167 d->RegisterHandler("sendJsonRequest", &Delegate::SendJsonRequest, delegate);
184 return d; 168 return d;
185 } 169 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698