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

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

Issue 2947843004: [Extensions Bindings] Introduce BindingAccessChecker (Closed)
Patch Set: lazyboy's Created 3 years, 6 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
« no previous file with comments | « extensions/renderer/api_bindings_system.h ('k') | extensions/renderer/binding_access_checker.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_bindings_system.h" 5 #include "extensions/renderer/api_bindings_system.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "extensions/renderer/api_binding_hooks.h" 10 #include "extensions/renderer/api_binding_hooks.h"
11 11
12 namespace extensions { 12 namespace extensions {
13 13
14 APIBindingsSystem::APIBindingsSystem( 14 APIBindingsSystem::APIBindingsSystem(
15 const binding::RunJSFunction& call_js, 15 const binding::RunJSFunction& call_js,
16 const binding::RunJSFunctionSync& call_js_sync, 16 const binding::RunJSFunctionSync& call_js_sync,
17 const GetAPISchemaMethod& get_api_schema, 17 const GetAPISchemaMethod& get_api_schema,
18 const APIBinding::AvailabilityCallback& is_available, 18 const BindingAccessChecker::AvailabilityCallback& is_available,
19 const APIRequestHandler::SendRequestMethod& send_request, 19 const APIRequestHandler::SendRequestMethod& send_request,
20 const APIEventHandler::EventListenersChangedMethod& event_listeners_changed, 20 const APIEventHandler::EventListenersChangedMethod& event_listeners_changed,
21 APILastError last_error) 21 APILastError last_error)
22 : type_reference_map_(base::Bind(&APIBindingsSystem::InitializeType, 22 : type_reference_map_(base::Bind(&APIBindingsSystem::InitializeType,
23 base::Unretained(this))), 23 base::Unretained(this))),
24 request_handler_(send_request, call_js, std::move(last_error)), 24 request_handler_(send_request, call_js, std::move(last_error)),
25 event_handler_(call_js, call_js_sync, event_listeners_changed), 25 event_handler_(call_js, call_js_sync, event_listeners_changed),
26 access_checker_(is_available),
26 call_js_(call_js), 27 call_js_(call_js),
27 call_js_sync_(call_js_sync), 28 call_js_sync_(call_js_sync),
28 get_api_schema_(get_api_schema), 29 get_api_schema_(get_api_schema) {}
29 is_available_(is_available) {}
30 30
31 APIBindingsSystem::~APIBindingsSystem() {} 31 APIBindingsSystem::~APIBindingsSystem() {}
32 32
33 v8::Local<v8::Object> APIBindingsSystem::CreateAPIInstance( 33 v8::Local<v8::Object> APIBindingsSystem::CreateAPIInstance(
34 const std::string& api_name, 34 const std::string& api_name,
35 v8::Local<v8::Context> context, 35 v8::Local<v8::Context> context,
36 APIBindingHooks** hooks_out) { 36 APIBindingHooks** hooks_out) {
37 std::unique_ptr<APIBinding>& binding = api_bindings_[api_name]; 37 std::unique_ptr<APIBinding>& binding = api_bindings_[api_name];
38 if (!binding) 38 if (!binding)
39 binding = CreateNewAPIBinding(api_name); 39 binding = CreateNewAPIBinding(api_name);
(...skipping 25 matching lines...) Expand all
65 hooks = std::move(iter->second); 65 hooks = std::move(iter->second);
66 binding_hooks_.erase(iter); 66 binding_hooks_.erase(iter);
67 } else { 67 } else {
68 hooks = base::MakeUnique<APIBindingHooks>(api_name, call_js_sync_); 68 hooks = base::MakeUnique<APIBindingHooks>(api_name, call_js_sync_);
69 } 69 }
70 70
71 return base::MakeUnique<APIBinding>( 71 return base::MakeUnique<APIBinding>(
72 api_name, function_definitions, type_definitions, event_definitions, 72 api_name, function_definitions, type_definitions, event_definitions,
73 property_definitions, 73 property_definitions,
74 base::Bind(&APIBindingsSystem::CreateCustomType, base::Unretained(this)), 74 base::Bind(&APIBindingsSystem::CreateCustomType, base::Unretained(this)),
75 is_available_, std::move(hooks), &type_reference_map_, &request_handler_, 75 std::move(hooks), &type_reference_map_, &request_handler_,
76 &event_handler_); 76 &event_handler_, &access_checker_);
77 } 77 }
78 78
79 void APIBindingsSystem::InitializeType(const std::string& type_name) { 79 void APIBindingsSystem::InitializeType(const std::string& type_name) {
80 // In order to initialize the type, we just initialize the full binding. This 80 // In order to initialize the type, we just initialize the full binding. This
81 // seems like a lot of work, but in practice, trying to extract out only the 81 // seems like a lot of work, but in practice, trying to extract out only the
82 // types from the schema, and then update the reference map based on that, is 82 // types from the schema, and then update the reference map based on that, is
83 // close enough to the same cost. Additionally, this happens lazily on API 83 // close enough to the same cost. Additionally, this happens lazily on API
84 // use, and relatively few APIs specify types from another API. Finally, this 84 // use, and relatively few APIs specify types from another API. Finally, this
85 // will also go away if/when we generate all these specifications. 85 // will also go away if/when we generate all these specifications.
86 std::string::size_type dot = type_name.rfind('.'); 86 std::string::size_type dot = type_name.rfind('.');
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 const std::string& property_name, 136 const std::string& property_name,
137 const base::ListValue* property_values) { 137 const base::ListValue* property_values) {
138 auto iter = custom_types_.find(type_name); 138 auto iter = custom_types_.find(type_name);
139 DCHECK(iter != custom_types_.end()) << "Custom type not found: " << type_name; 139 DCHECK(iter != custom_types_.end()) << "Custom type not found: " << type_name;
140 return iter->second.Run(isolate, property_name, property_values, 140 return iter->second.Run(isolate, property_name, property_values,
141 &request_handler_, &event_handler_, 141 &request_handler_, &event_handler_,
142 &type_reference_map_); 142 &type_reference_map_);
143 } 143 }
144 144
145 } // namespace extensions 145 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/renderer/api_bindings_system.h ('k') | extensions/renderer/binding_access_checker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698