runtime_features.cc revision f2477e01787aa58f445919b809d89e252beef54f
17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file. 47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/child/runtime_features.h" 67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/command_line.h" 87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/common/content_switches.h" 97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebRuntimeFeatures.h" 107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_ANDROID) 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include <cpu-features.h> 138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "media/base/android/media_codec_bridge.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebRuntimeFeatures; 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace content { 197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)static void SetRuntimeFeatureDefaultsForPlatform() { 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_ANDROID) 22a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#if !defined(GOOGLE_TV) 238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // MSE/EME implementation needs Android MediaCodec API. 248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!media::MediaCodecBridge::IsAvailable()) { 25a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) WebRuntimeFeatures::enableWebKitMediaSource(false); 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) WebRuntimeFeatures::enableMediaSource(false); 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) WebRuntimeFeatures::enablePrefixedEncryptedMedia(false); 28a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif // !defined(GOOGLE_TV) 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool enable_webaudio = false; 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(ARCH_CPU_ARMEL) 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // WebAudio needs Android MediaCodec API 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) enable_webaudio = media::MediaCodecBridge::IsAvailable(); 34a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif // defined(ARCH_CPU_ARMEL) 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableWebAudio(enable_webaudio); 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Android does not support the Gamepad API. 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableGamepad(false); 387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Android does not have support for PagePopup 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enablePagePopup(false); 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // datalist on Android is not enabled 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableDataListElement(false); 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Android does not yet support the Web Notification API. crbug.com/115320 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WebRuntimeFeatures::enableNotifications(false); 441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Android does not yet support SharedWorker. crbug.com/154571 451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) WebRuntimeFeatures::enableSharedWorker(false); 46a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif // defined(OS_ANDROID) 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void SetRuntimeFeaturesDefaultsAndUpdateFromArgs( 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const CommandLine& command_line) { 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableStableFeatures(true); 527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (command_line.HasSwitch(switches::kEnableExperimentalWebPlatformFeatures)) 547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableExperimentalFeatures(true); 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SetRuntimeFeatureDefaultsForPlatform(); 577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableDatabases)) 597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableDatabase(false); 607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableApplicationCache)) 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableApplicationCache(false); 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableDesktopNotifications)) 657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableNotifications(false); 667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableLocalStorage)) 687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableLocalStorage(false); 697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableSessionStorage)) 717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableSessionStorage(false); 727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableGeolocation)) 747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableGeolocation(false); 757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableWebKitMediaSource)) 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableWebKitMediaSource(false); 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (command_line.HasSwitch(switches::kDisableUnprefixedMediaSource)) 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) WebRuntimeFeatures::enableMediaSource(false); 814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableSharedWorkers)) 831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) WebRuntimeFeatures::enableSharedWorker(false); 841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_ANDROID) 867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableWebRTC)) { 877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableMediaStream(false); 887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enablePeerConnection(false); 897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 91d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (!command_line.HasSwitch(switches::kEnableSpeechRecognition)) 927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableScriptedSpeech(false); 937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif 947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (command_line.HasSwitch(switches::kEnableServiceWorker)) 964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) WebRuntimeFeatures::enableServiceWorker(true); 974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableWebAudio)) 997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableWebAudio(false); 1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableFullScreen)) 1027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableFullscreen(false); 1037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableEncryptedMedia)) 1057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableEncryptedMedia(true); 1067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (command_line.HasSwitch(switches::kDisablePrefixedEncryptedMedia)) 1084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) WebRuntimeFeatures::enablePrefixedEncryptedMedia(false); 1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // FIXME: Remove the enable switch once Web Animations CSS is enabled by 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // default in Blink. 1127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (command_line.HasSwitch(switches::kEnableWebAnimationsCSS)) 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) WebRuntimeFeatures::enableWebAnimationsCSS(true); 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) else if (command_line.HasSwitch(switches::kDisableWebAnimationsCSS)) 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) WebRuntimeFeatures::enableWebAnimationsCSS(false); 1167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (command_line.HasSwitch(switches::kEnableWebAnimationsSVG)) 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) WebRuntimeFeatures::enableWebAnimationsSVG(true); 1197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableWebMIDI)) 1217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableWebMIDI(true); 1227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 123d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (command_line.HasSwitch(switches::kDisableDeviceMotion)) 124d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) WebRuntimeFeatures::enableDeviceMotion(false); 1257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableDeviceOrientation)) 1277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableDeviceOrientation(false); 1287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableSpeechInput)) 1307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableSpeechInput(false); 1317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableFileSystem)) 1337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableFileSystem(false); 1347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableExperimentalCanvasFeatures)) 1367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableExperimentalCanvasFeatures(true); 1377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableSpeechSynthesis)) 1397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableSpeechSynthesis(true); 1407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableWebGLDraftExtensions)) 1427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableWebGLDraftExtensions(true); 143ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 144ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (command_line.HasSwitch(switches::kEnableHTMLImports)) 145ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WebRuntimeFeatures::enableHTMLImports(true); 146c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (command_line.HasSwitch(switches::kEnableOverlayFullscreenVideo)) 1484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) WebRuntimeFeatures::enableOverlayFullscreenVideo(true); 1494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 150c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch if (command_line.HasSwitch(switches::kEnableOverlayScrollbars)) 151c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch WebRuntimeFeatures::enableOverlayScrollbars(true); 152424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 153424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableInputModeAttribute)) 154424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) WebRuntimeFeatures::enableInputModeAttribute(true); 1554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (command_line.HasSwitch(switches::kEnableFastTextAutosizing)) 1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) WebRuntimeFeatures::enableFastTextAutosizing(true); 1580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 1590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableRepaintAfterLayout)) 1600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) WebRuntimeFeatures::enableRepaintAfterLayout(true); 1617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace content 164