Index: chrome/renderer/extensions/api_definitions_natives.cc |
diff --git a/chrome/renderer/extensions/api_definitions_natives.cc b/chrome/renderer/extensions/api_definitions_natives.cc |
index bc8b4b0f9ea0a3642a8358184f5732628f505ab9..6997f678d535b22b6018fc23873e8337734cd12d 100644 |
--- a/chrome/renderer/extensions/api_definitions_natives.cc |
+++ b/chrome/renderer/extensions/api_definitions_natives.cc |
@@ -4,6 +4,8 @@ |
#include "chrome/renderer/extensions/api_definitions_natives.h" |
+#include "chrome/common/extensions/api/extension_api.h" |
+ |
namespace extensions { |
ApiDefinitionsNatives::ApiDefinitionsNatives( |
@@ -12,6 +14,9 @@ ApiDefinitionsNatives::ApiDefinitionsNatives( |
RouteFunction("GetExtensionAPIDefinition", |
base::Bind(&ApiDefinitionsNatives::GetExtensionAPIDefinition, |
base::Unretained(this))); |
+ RouteFunction("IsMemberAllowed", |
+ base::Bind(&ApiDefinitionsNatives::IsMemberAllowed, |
+ base::Unretained(this))); |
} |
v8::Handle<v8::Value> ApiDefinitionsNatives::GetExtensionAPIDefinition( |
@@ -23,4 +28,27 @@ v8::Handle<v8::Value> ApiDefinitionsNatives::GetExtensionAPIDefinition( |
v8_context->GetAvailableExtensionAPIs()); |
} |
+v8::Handle<v8::Value> ApiDefinitionsNatives::IsMemberAllowed( |
+ const v8::Arguments& arguments) { |
+ if (arguments.Length() < 1 || !arguments[0]->IsString()) { |
+ LOG(ERROR) << "Invalid arguments"; |
+ return v8::Boolean::New(false); |
+ } |
+ |
+ ChromeV8Context* v8_context = |
+ extension_dispatcher()->v8_context_set().GetCurrent(); |
+ CHECK(v8_context); |
+ |
+ const Extension* extension = |
+ extension_dispatcher()->extensions()->GetByID( |
+ v8_context->GetExtensionID()); |
+ |
+ std::string api_name = *v8::String::AsciiValue(arguments[0]->ToString()); |
+ bool result = ExtensionAPI::GetSharedInstance()->IsAvailable( |
+ api_name, |
+ extension, |
+ v8_context->context_type()); |
+ return v8::Boolean::New(result); |
+} |
+ |
} // namespace extensions |