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

Side by Side Diff: extensions/renderer/api_binding_hooks.cc

Issue 2831453002: [Extensions Bindings] Move custom handling to APIBindingHooksDelegate (Closed)
Patch Set: . Created 3 years, 8 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "extensions/renderer/api_binding_hooks.h" 5 #include "extensions/renderer/api_binding_hooks.h"
6 6
7 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "base/strings/stringprintf.h" 8 #include "base/strings/stringprintf.h"
9 #include "base/supports_user_data.h" 9 #include "base/supports_user_data.h"
10 #include "extensions/renderer/api_binding_hooks_delegate.h" 10 #include "extensions/renderer/api_binding_hooks_delegate.h"
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 : code(code), custom_callback(custom_callback) {} 200 : code(code), custom_callback(custom_callback) {}
201 APIBindingHooks::RequestResult::~RequestResult() {} 201 APIBindingHooks::RequestResult::~RequestResult() {}
202 APIBindingHooks::RequestResult::RequestResult(const RequestResult& other) = 202 APIBindingHooks::RequestResult::RequestResult(const RequestResult& other) =
203 default; 203 default;
204 204
205 APIBindingHooks::APIBindingHooks(const std::string& api_name, 205 APIBindingHooks::APIBindingHooks(const std::string& api_name,
206 const binding::RunJSFunctionSync& run_js) 206 const binding::RunJSFunctionSync& run_js)
207 : api_name_(api_name), run_js_(run_js) {} 207 : api_name_(api_name), run_js_(run_js) {}
208 APIBindingHooks::~APIBindingHooks() {} 208 APIBindingHooks::~APIBindingHooks() {}
209 209
210 void APIBindingHooks::RegisterHandleRequest(const std::string& method_name,
211 const HandleRequestHook& hook) {
212 DCHECK(!hooks_used_) << "Hooks must be registered before the first use!";
213 request_hooks_[method_name] = hook;
214 }
215
216 APIBindingHooks::RequestResult APIBindingHooks::RunHooks( 210 APIBindingHooks::RequestResult APIBindingHooks::RunHooks(
217 const std::string& method_name, 211 const std::string& method_name,
218 v8::Local<v8::Context> context, 212 v8::Local<v8::Context> context,
219 const APISignature* signature, 213 const APISignature* signature,
220 std::vector<v8::Local<v8::Value>>* arguments, 214 std::vector<v8::Local<v8::Value>>* arguments,
221 const APITypeReferenceMap& type_refs) { 215 const APITypeReferenceMap& type_refs) {
222 // Easy case: a native custom hook. 216 // Easy case: a native custom hook.
223 auto request_hooks_iter = request_hooks_.find(method_name); 217 if (delegate_) {
224 if (request_hooks_iter != request_hooks_.end()) { 218 RequestResult result = delegate_->HandleRequest(
225 RequestResult result = 219 method_name, signature, context, arguments, type_refs);
226 request_hooks_iter->second.Run( 220 if (result.code != RequestResult::NOT_HANDLED)
227 signature, context, arguments, type_refs); 221 return result;
228 // Right now, it doesn't make sense to register a request handler that
229 // doesn't handle the request.
230 DCHECK_NE(RequestResult::NOT_HANDLED, result.code);
231 return result;
232 } 222 }
233 223
234 // Harder case: looking up a custom hook registered on the context (since 224 // Harder case: looking up a custom hook registered on the context (since
235 // these are JS, each context has a separate instance). 225 // these are JS, each context has a separate instance).
236 v8::Local<v8::Object> hook_interface_object = 226 v8::Local<v8::Object> hook_interface_object =
237 GetJSHookInterfaceObject(api_name_, context, false); 227 GetJSHookInterfaceObject(api_name_, context, false);
238 if (hook_interface_object.IsEmpty()) 228 if (hook_interface_object.IsEmpty())
239 return RequestResult(RequestResult::NOT_HANDLED); 229 return RequestResult(RequestResult::NOT_HANDLED);
240 230
241 v8::Isolate* isolate = context->GetIsolate(); 231 v8::Isolate* isolate = context->GetIsolate();
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 if (result.IsEmpty() || 358 if (result.IsEmpty() ||
369 !gin::Converter<std::vector<v8::Local<v8::Value>>>::FromV8( 359 !gin::Converter<std::vector<v8::Local<v8::Value>>>::FromV8(
370 context->GetIsolate(), result, &new_args)) { 360 context->GetIsolate(), result, &new_args)) {
371 return false; 361 return false;
372 } 362 }
373 arguments->swap(new_args); 363 arguments->swap(new_args);
374 return true; 364 return true;
375 } 365 }
376 366
377 } // namespace extensions 367 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/renderer/api_binding_hooks.h ('k') | extensions/renderer/api_binding_hooks_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698