Chromium Code Reviews| 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..97b6c678e99567fa853aa53abb220571d1fc00a6 100644 |
| --- a/chrome/renderer/extensions/api_definitions_natives.cc |
| +++ b/chrome/renderer/extensions/api_definitions_natives.cc |
| @@ -4,6 +4,12 @@ |
| #include "chrome/renderer/extensions/api_definitions_natives.h" |
| +#include <algorithm> |
| + |
| +namespace { |
| +const char kInvalidExtensionNamespace[] = "Invalid extension namespace"; |
| +} |
| + |
| namespace extensions { |
| ApiDefinitionsNatives::ApiDefinitionsNatives( |
| @@ -19,8 +25,30 @@ v8::Handle<v8::Value> ApiDefinitionsNatives::GetExtensionAPIDefinition( |
| ChromeV8Context* v8_context = |
| extension_dispatcher()->v8_context_set().GetCurrent(); |
| CHECK(v8_context); |
| - return extension_dispatcher()->v8_schema_registry()->GetSchemas( |
| - v8_context->GetAvailableExtensionAPIs()); |
| + |
| + std::set<std::string> available_apis(v8_context->GetAvailableExtensionAPIs()); |
| + if (args.Length() == 0) { |
| + return extension_dispatcher()->v8_schema_registry()->GetSchemas( |
| + available_apis); |
| + } else { |
|
Aaron Boodman
2012/05/11 19:16:56
You can eliminate the else block because of the ea
battre
2012/05/15 16:50:09
Done.
|
| + // Build set of APIs requested by the user. |
| + std::set<std::string> requested_apis; |
| + for (int i = 0; i < args.Length(); ++i) { |
| + if (!args[i]->IsString()) { |
| + v8::ThrowException(v8::String::New(kInvalidExtensionNamespace)); |
| + return v8::Undefined(); |
| + } |
| + requested_apis.insert(*v8::String::Utf8Value(args[i]->ToString())); |
| + } |
| + |
| + // Filter those that are unknown. |
| + std::set<std::string> apis_to_check; |
| + std::set_intersection(requested_apis.begin(), requested_apis.end(), |
| + available_apis.begin(), available_apis.end(), |
| + std::inserter(apis_to_check, apis_to_check.begin())); |
| + return extension_dispatcher()->v8_schema_registry()->GetSchemas( |
| + apis_to_check); |
| + } |
| } |
| } // namespace extensions |