runtime_features.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// Copyright 2013 The Chromium Authors. All rights reserved. 236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// Use of this source code is governed by a BSD-style license that can be 336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// found in the LICENSE file. 436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "content/child/runtime_features.h" 636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "base/command_line.h" 836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "content/common/content_switches_internal.h" 936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "content/public/common/content_switches.h" 1036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "third_party/WebKit/public/web/WebRuntimeFeatures.h" 1136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 1236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#if defined(OS_ANDROID) 1336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include <cpu-features.h> 1436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "media/base/android/media_codec_bridge.h" 1536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#endif 1636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 1736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesusing blink::WebRuntimeFeatures; 1836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 1936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesnamespace content { 2036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 2136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesstatic void SetRuntimeFeatureDefaultsForPlatform() { 2236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#if defined(OS_ANDROID) 2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // MSE/EME implementation needs Android MediaCodec API. 2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (!media::MediaCodecBridge::IsAvailable()) { 2536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableWebKitMediaSource(false); 2636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableMediaSource(false); 2736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enablePrefixedEncryptedMedia(false); 2836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 2936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // WebAudio is enabled by default only on ARM and only when the 3036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // MediaCodec API is available. 3136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableWebAudio( 32dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines media::MediaCodecBridge::IsAvailable() && 3336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines (android_getCpuFamily() == ANDROID_CPU_FAMILY_ARM)); 3436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Android does not support the Gamepad API. 3536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableGamepad(false); 3636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Android does not have support for PagePopup 3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enablePagePopup(false); 3836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Android does not yet support the Web Notification API. crbug.com/115320 3936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableNotifications(false); 4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Android does not yet support SharedWorker. crbug.com/154571 4136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableSharedWorker(false); 4236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Android does not yet support NavigatorContentUtils. 4336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableNavigatorContentUtils(false); 4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableTouchIconLoading(true); 4536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableOrientationEvent(true); 4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#else 4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableNavigatorContentUtils(true); 4836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#endif // defined(OS_ANDROID) 4936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} 5036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 5136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesvoid SetRuntimeFeaturesDefaultsAndUpdateFromArgs( 5236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines const CommandLine& command_line) { 5336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kEnableExperimentalWebPlatformFeatures)) 5436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableExperimentalFeatures(true); 5536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 5636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines SetRuntimeFeatureDefaultsForPlatform(); 5736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 5836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kDisableDatabases)) 5936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableDatabase(false); 6036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 6136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kDisableApplicationCache)) 6236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableApplicationCache(false); 6336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 6436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kDisableDesktopNotifications)) 6536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableNotifications(false); 6636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 6736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kDisableNavigatorContentUtils)) 6836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableNavigatorContentUtils(false); 6936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 7036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kDisableLocalStorage)) 7136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableLocalStorage(false); 7236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 7336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kDisableSessionStorage)) 7436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableSessionStorage(false); 7536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 7636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kDisableWebKitMediaSource)) 7736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableWebKitMediaSource(false); 7836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 7936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kDisableUnprefixedMediaSource)) 8036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableMediaSource(false); 8136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 8236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kDisableSharedWorkers)) 8336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableSharedWorker(false); 8436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 8536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#if defined(OS_ANDROID) 8636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kDisableWebRTC)) { 8736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableMediaStream(false); 8836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enablePeerConnection(false); 8936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 9036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 9136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (!command_line.HasSwitch(switches::kEnableSpeechRecognition)) 9236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableScriptedSpeech(false); 9336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#endif 9436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 9536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kEnableServiceWorker)) 9636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableServiceWorker(true); 9736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 9836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#if defined(OS_ANDROID) 9936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // WebAudio requires the MediaCodec API. 10036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#if defined(ARCH_CPU_X86) 10136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // WebAudio is disabled by default on x86. 10236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableWebAudio( 10336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines command_line.HasSwitch(switches::kEnableWebAudio) && 10436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines media::MediaCodecBridge::IsAvailable()); 105dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#elif defined(ARCH_CPU_ARMEL) 10636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // WebAudio is enabled by default on ARM. 10736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableWebAudio( 10836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines !command_line.HasSwitch(switches::kDisableWebAudio) && 10936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines media::MediaCodecBridge::IsAvailable()); 11036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#else 11136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableWebAudio(false); 11236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#endif 11336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#else 11436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kDisableWebAudio)) 11536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableWebAudio(false); 11636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#endif 11736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 11836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kEnableEncryptedMedia)) 11936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableEncryptedMedia(true); 12036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 12136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kDisablePrefixedEncryptedMedia)) 12236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enablePrefixedEncryptedMedia(false); 12336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 12436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kEnableWebAnimationsSVG)) 12536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableWebAnimationsSVG(true); 12636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 12736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kEnableWebMIDI)) 12836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableWebMIDI(true); 12936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 13036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kDisableSpeechInput)) 13136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableSpeechInput(false); 13236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 13336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kDisableFileSystem)) 13436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableFileSystem(false); 13536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 13636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#if defined(OS_WIN) 13736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kEnableDirectWrite)) 13836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableDirectWrite(true); 13936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#endif 14036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 14136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kEnableExperimentalCanvasFeatures)) 14236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableExperimentalCanvasFeatures(true); 14336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 14436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kEnableSpeechSynthesis)) 14536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableSpeechSynthesis(true); 14636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 14736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kEnableWebGLDraftExtensions)) 14836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableWebGLDraftExtensions(true); 14936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 15036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kEnableHTMLImports)) 15136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableHTMLImports(true); 15236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 15336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kEnableOverlayFullscreenVideo)) 15436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableOverlayFullscreenVideo(true); 15536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 15636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (IsOverlayScrollbarEnabled()) 15736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableOverlayScrollbars(true); 15836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 15936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kEnableFastTextAutosizing)) 16036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableFastTextAutosizing(true); 16136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 16236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kDisableRepaintAfterLayout)) 16336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableRepaintAfterLayout(false); 16436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 16536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kEnableRepaintAfterLayout)) 16636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableRepaintAfterLayout(true); 16736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 16836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kEnableTargetedStyleRecalc)) 16936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableTargetedStyleRecalc(true); 17036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 17136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (command_line.HasSwitch(switches::kEnableBleedingEdgeRenderingFastPaths)) 17236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WebRuntimeFeatures::enableBleedingEdgeFastPaths(true); 17336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} 174dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 17536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} // namespace content 17636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines