runtime_features.cc revision ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2013 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) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/child/runtime_features.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/command_line.h" 8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "content/public/common/content_switches.h" 9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "third_party/WebKit/public/web/WebRuntimeFeatures.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include <cpu-features.h> 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/android/build_info.h" 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WebRuntimeFeatures; 17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace content { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void SetRuntimeFeatureDefaultsForPlatform() { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 22558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#if !defined(GOOGLE_TV) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // MSE/EME implementation needs Android MediaCodec API that was introduced 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in JellyBrean. 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (base::android::BuildInfo::GetInstance()->sdk_int() < 16) { 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) WebRuntimeFeatures::enableWebKitMediaSource(false); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebRuntimeFeatures::enableLegacyEncryptedMedia(false); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // !defined(GOOGLE_TV) 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool enable_webaudio = false; 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(ARCH_CPU_ARMEL) 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) enable_webaudio = 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ((android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(ARCH_CPU_ARMEL) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRuntimeFeatures::enableWebAudio(enable_webaudio); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Android does not support the Gamepad API. 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRuntimeFeatures::enableGamepad(false); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Android does not have support for PagePopup 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRuntimeFeatures::enablePagePopup(false); 4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // datalist on Android is not enabled 4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) WebRuntimeFeatures::enableDataListElement(false); 42bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#endif // defined(OS_ANDROID) 43bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 44bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 45bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochvoid SetRuntimeFeaturesDefaultsAndUpdateFromArgs( 4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const CommandLine& command_line) { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRuntimeFeatures::enableStableFeatures(true); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (command_line.HasSwitch(switches::kEnableExperimentalWebPlatformFeatures)) 50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) WebRuntimeFeatures::enableExperimentalFeatures(true); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetRuntimeFeatureDefaultsForPlatform(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 54a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (command_line.HasSwitch(switches::kDisableDatabases)) 55a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) WebRuntimeFeatures::enableDatabase(false); 56a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 57a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (command_line.HasSwitch(switches::kDisableApplicationCache)) 58a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) WebRuntimeFeatures::enableApplicationCache(false); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableDesktopNotifications)) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRuntimeFeatures::enableNotifications(false); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableLocalStorage)) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRuntimeFeatures::enableLocalStorage(false); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (command_line.HasSwitch(switches::kDisableSessionStorage)) 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebRuntimeFeatures::enableSessionStorage(false); 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (command_line.HasSwitch(switches::kDisableGeolocation)) 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebRuntimeFeatures::enableGeolocation(false); 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (command_line.HasSwitch(switches::kDisableWebKitMediaSource)) 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebRuntimeFeatures::enableWebKitMediaSource(false); 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_ANDROID) 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (command_line.HasSwitch(switches::kDisableWebRTC)) { 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebRuntimeFeatures::enableMediaStream(false); 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebRuntimeFeatures::enablePeerConnection(false); 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!command_line.HasSwitch(switches::kEnableSpeechRecognition) || 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch !command_line.HasSwitch( 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) switches::kEnableExperimentalWebPlatformFeatures)) { 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebRuntimeFeatures::enableScriptedSpeech(false); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableWebAudio)) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRuntimeFeatures::enableWebAudio(false); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (command_line.HasSwitch(switches::kDisableFullScreen)) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRuntimeFeatures::enableFullscreen(false); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (command_line.HasSwitch(switches::kEnableEncryptedMedia)) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebRuntimeFeatures::enableEncryptedMedia(true); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (command_line.HasSwitch(switches::kDisableLegacyEncryptedMedia)) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebRuntimeFeatures::enableLegacyEncryptedMedia(false); 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (command_line.HasSwitch(switches::kEnableWebAnimationsCSS)) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRuntimeFeatures::enableWebAnimationsCSS(); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (command_line.HasSwitch(switches::kEnableWebAnimationsSVG)) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebRuntimeFeatures::enableWebAnimationsSVG(); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (command_line.HasSwitch(switches::kEnableWebMIDI)) 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebRuntimeFeatures::enableWebMIDI(true); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Enable Device Motion on Android by default. 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebRuntimeFeatures::enableDeviceMotion( 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !command_line.HasSwitch(switches::kDisableDeviceMotion)); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (command_line.HasSwitch(switches::kEnableDeviceMotion)) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebRuntimeFeatures::enableDeviceMotion(true); 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (command_line.HasSwitch(switches::kDisableDeviceOrientation)) 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebRuntimeFeatures::enableDeviceOrientation(false); 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (command_line.HasSwitch(switches::kDisableSpeechInput)) 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebRuntimeFeatures::enableSpeechInput(false); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableFileSystem)) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebRuntimeFeatures::enableFileSystem(false); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (command_line.HasSwitch(switches::kEnableExperimentalCanvasFeatures)) 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebRuntimeFeatures::enableExperimentalCanvasFeatures(true); 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 130d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (command_line.HasSwitch(switches::kEnableSpeechSynthesis)) 131d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) WebRuntimeFeatures::enableSpeechSynthesis(true); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (command_line.HasSwitch(switches::kEnableWebGLDraftExtensions)) 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebRuntimeFeatures::enableWebGLDraftExtensions(true); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (command_line.HasSwitch(switches::kEnableHTMLImports)) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebRuntimeFeatures::enableHTMLImports(true); 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace content 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)