OLD | NEW |
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/native_extension_bindings_system.h" | 5 #include "extensions/renderer/native_extension_bindings_system.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
9 #include "content/public/common/console_message_level.h" | 9 #include "content/public/common/console_message_level.h" |
10 #include "content/public/common/content_switches.h" | 10 #include "content/public/common/content_switches.h" |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 } | 188 } |
189 | 189 |
190 // Returns the API schema indicated by |api_name|. | 190 // Returns the API schema indicated by |api_name|. |
191 const base::DictionaryValue& GetAPISchema(const std::string& api_name) { | 191 const base::DictionaryValue& GetAPISchema(const std::string& api_name) { |
192 const base::DictionaryValue* schema = | 192 const base::DictionaryValue* schema = |
193 ExtensionAPI::GetSharedInstance()->GetSchema(api_name); | 193 ExtensionAPI::GetSharedInstance()->GetSchema(api_name); |
194 CHECK(schema) << api_name; | 194 CHECK(schema) << api_name; |
195 return *schema; | 195 return *schema; |
196 } | 196 } |
197 | 197 |
198 // Returns true if the method specified by |method_name| is available to the | 198 // Returns true if the feature specified by |name| is available to the given |
199 // given |context|. | 199 // |context|. |
200 bool IsAPIMethodAvailable(ScriptContext* context, | 200 bool IsAPIFeatureAvailable(v8::Local<v8::Context> context, |
201 const std::string& method_name) { | 201 const std::string& name) { |
202 return context->GetAvailability(method_name).is_available(); | 202 ScriptContext* script_context = |
| 203 ScriptContextSet::GetContextByV8Context(context); |
| 204 DCHECK(script_context); |
| 205 return script_context->GetAvailability(name).is_available(); |
203 } | 206 } |
204 | 207 |
205 // Instantiates the binding object for the given |name|. |name| must specify a | 208 // Instantiates the binding object for the given |name|. |name| must specify a |
206 // specific feature. | 209 // specific feature. |
207 v8::Local<v8::Object> CreateRootBinding(v8::Local<v8::Context> context, | 210 v8::Local<v8::Object> CreateRootBinding(v8::Local<v8::Context> context, |
208 ScriptContext* script_context, | 211 ScriptContext* script_context, |
209 const std::string& name, | 212 const std::string& name, |
210 APIBindingsSystem* bindings_system) { | 213 APIBindingsSystem* bindings_system) { |
211 APIBindingHooks* hooks = nullptr; | 214 APIBindingHooks* hooks = nullptr; |
212 v8::Local<v8::Object> binding_object = bindings_system->CreateAPIInstance( | 215 v8::Local<v8::Object> binding_object = |
213 name, context, base::Bind(&IsAPIMethodAvailable, script_context), &hooks); | 216 bindings_system->CreateAPIInstance(name, context, &hooks); |
214 | 217 |
215 gin::Handle<APIBindingBridge> bridge_handle = gin::CreateHandle( | 218 gin::Handle<APIBindingBridge> bridge_handle = gin::CreateHandle( |
216 context->GetIsolate(), | 219 context->GetIsolate(), |
217 new APIBindingBridge(hooks, context, binding_object, | 220 new APIBindingBridge(hooks, context, binding_object, |
218 script_context->GetExtensionID(), | 221 script_context->GetExtensionID(), |
219 script_context->GetContextTypeDescription(), | 222 script_context->GetContextTypeDescription(), |
220 base::Bind(&CallJsFunction))); | 223 base::Bind(&CallJsFunction))); |
221 v8::Local<v8::Value> native_api_bridge = bridge_handle.ToV8(); | 224 v8::Local<v8::Value> native_api_bridge = bridge_handle.ToV8(); |
222 script_context->module_system()->OnNativeBindingCreated(name, | 225 script_context->module_system()->OnNativeBindingCreated(name, |
223 native_api_bridge); | 226 native_api_bridge); |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 | 349 |
347 NativeExtensionBindingsSystem::NativeExtensionBindingsSystem( | 350 NativeExtensionBindingsSystem::NativeExtensionBindingsSystem( |
348 const SendRequestIPCMethod& send_request_ipc, | 351 const SendRequestIPCMethod& send_request_ipc, |
349 const SendEventListenerIPCMethod& send_event_listener_ipc) | 352 const SendEventListenerIPCMethod& send_event_listener_ipc) |
350 : send_request_ipc_(send_request_ipc), | 353 : send_request_ipc_(send_request_ipc), |
351 send_event_listener_ipc_(send_event_listener_ipc), | 354 send_event_listener_ipc_(send_event_listener_ipc), |
352 api_system_( | 355 api_system_( |
353 base::Bind(&CallJsFunction), | 356 base::Bind(&CallJsFunction), |
354 base::Bind(&CallJsFunctionSync), | 357 base::Bind(&CallJsFunctionSync), |
355 base::Bind(&GetAPISchema), | 358 base::Bind(&GetAPISchema), |
| 359 base::Bind(&IsAPIFeatureAvailable), |
356 base::Bind(&NativeExtensionBindingsSystem::SendRequest, | 360 base::Bind(&NativeExtensionBindingsSystem::SendRequest, |
357 base::Unretained(this)), | 361 base::Unretained(this)), |
358 base::Bind(&NativeExtensionBindingsSystem::OnEventListenerChanged, | 362 base::Bind(&NativeExtensionBindingsSystem::OnEventListenerChanged, |
359 base::Unretained(this)), | 363 base::Unretained(this)), |
360 APILastError(base::Bind(&GetRuntime), base::Bind(&AddConsoleError))), | 364 APILastError(base::Bind(&GetRuntime), base::Bind(&AddConsoleError))), |
361 weak_factory_(this) { | 365 weak_factory_(this) { |
362 api_system_.RegisterCustomType("storage.StorageArea", | 366 api_system_.RegisterCustomType("storage.StorageArea", |
363 base::Bind(&StorageArea::CreateStorageArea)); | 367 base::Bind(&StorageArea::CreateStorageArea)); |
364 api_system_.RegisterCustomType("types.ChromeSetting", | 368 api_system_.RegisterCustomType("types.ChromeSetting", |
365 base::Bind(&ChromeSetting::Create)); | 369 base::Bind(&ChromeSetting::Create)); |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
685 v8::Local<v8::Value>* binding_util_out) { | 689 v8::Local<v8::Value>* binding_util_out) { |
686 gin::Handle<APIBindingJSUtil> handle = gin::CreateHandle( | 690 gin::Handle<APIBindingJSUtil> handle = gin::CreateHandle( |
687 context->GetIsolate(), | 691 context->GetIsolate(), |
688 new APIBindingJSUtil( | 692 new APIBindingJSUtil( |
689 api_system_.type_reference_map(), api_system_.request_handler(), | 693 api_system_.type_reference_map(), api_system_.request_handler(), |
690 api_system_.event_handler(), base::Bind(&CallJsFunction))); | 694 api_system_.event_handler(), base::Bind(&CallJsFunction))); |
691 *binding_util_out = handle.ToV8(); | 695 *binding_util_out = handle.ToV8(); |
692 } | 696 } |
693 | 697 |
694 } // namespace extensions | 698 } // namespace extensions |
OLD | NEW |