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)