blob: 37b1ce907e1446eee13fd20aa6669d3a382c6ff7 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "bindings/core/v8/ConditionalFeatures.h"
#include "bindings/core/v8/ScriptState.h"
#include "bindings/core/v8/V8HTMLLinkElement.h"
#include "bindings/core/v8/V8Navigator.h"
#include "bindings/core/v8/V8Window.h"
#include "core/dom/ExecutionContext.h"
#include "core/origin_trials/OriginTrialContext.h"
namespace blink {
void installConditionalFeaturesCore(const WrapperTypeInfo* wrapperTypeInfo,
const ScriptState* scriptState,
v8::Local<v8::Object> prototypeObject,
v8::Local<v8::Function> interfaceObject) {
// TODO(iclelland): Generate all of this logic at compile-time, based on the
// configuration of origin trial enabled attibutes and interfaces in IDL
// files. (crbug.com/615060)
ExecutionContext* executionContext = scriptState->getExecutionContext();
if (!executionContext)
return;
OriginTrialContext* originTrialContext = OriginTrialContext::from(
executionContext, OriginTrialContext::DontCreateIfNotExists);
if (wrapperTypeInfo == &V8HTMLLinkElement::wrapperTypeInfo) {
if (RuntimeEnabledFeatures::linkServiceWorkerEnabled() ||
(originTrialContext &&
originTrialContext->isFeatureEnabled("ForeignFetch"))) {
V8HTMLLinkElement::installLinkServiceWorker(
scriptState->isolate(), scriptState->world(), v8::Local<v8::Object>(),
prototypeObject, interfaceObject);
}
}
}
namespace {
InstallConditionalFeaturesFunction s_installConditionalFeaturesFunction =
&installConditionalFeaturesCore;
}
InstallConditionalFeaturesFunction setInstallConditionalFeaturesFunction(
InstallConditionalFeaturesFunction newInstallConditionalFeaturesFunction) {
InstallConditionalFeaturesFunction originalFunction =
s_installConditionalFeaturesFunction;
s_installConditionalFeaturesFunction = newInstallConditionalFeaturesFunction;
return originalFunction;
}
void installConditionalFeatures(const WrapperTypeInfo* type,
const ScriptState* scriptState,
v8::Local<v8::Object> prototypeObject,
v8::Local<v8::Function> interfaceObject) {
(*s_installConditionalFeaturesFunction)(type, scriptState, prototypeObject,
interfaceObject);
}
} // namespace blink