10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "extensions/renderer/api_definitions_natives.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "extensions/common/features/feature.h"
8ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "extensions/common/features/feature_provider.h"
9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "extensions/renderer/dispatcher.h"
100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "extensions/renderer/script_context.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ApiDefinitionsNatives::ApiDefinitionsNatives(Dispatcher* dispatcher,
150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                                             ScriptContext* context)
160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    : ObjectBackedNativeHandler(context), dispatcher_(dispatcher) {
170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  RouteFunction(
180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      "GetExtensionAPIDefinitionsForTest",
190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      base::Bind(&ApiDefinitionsNatives::GetExtensionAPIDefinitionsForTest,
200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                 base::Unretained(this)));
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ApiDefinitionsNatives::GetExtensionAPIDefinitionsForTest(
247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    const v8::FunctionCallbackInfo<v8::Value>& args) {
257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  std::vector<std::string> apis;
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const FeatureProvider* feature_provider = FeatureProvider::GetAPIFeatures();
277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  const std::vector<std::string>& feature_names =
287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      feature_provider->GetAllFeatureNames();
297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  for (std::vector<std::string>::const_iterator i = feature_names.begin();
300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch       i != feature_names.end();
310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch       ++i) {
327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    if (!feature_provider->GetParent(feature_provider->GetFeature(*i)) &&
337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        context()->GetAvailability(*i).is_available()) {
347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      apis.push_back(*i);
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    }
367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  args.GetReturnValue().Set(
380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      dispatcher_->v8_schema_registry()->GetSchemas(apis));
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extensions
42