runtime_features.cc revision 424c4d7b64af9d0d8fd9624f381f469654d5e3d2
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>
13a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/android/build_info.h"
147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif
157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using WebKit::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)
23a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // MSE/EME implementation needs Android MediaCodec API that was introduced
24a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // in JellyBrean.
25a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  if (base::android::BuildInfo::GetInstance()->sdk_int() < 16) {
26a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    WebRuntimeFeatures::enableWebKitMediaSource(false);
27a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    WebRuntimeFeatures::enableLegacyEncryptedMedia(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)
32424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // WebAudio needs Android MediaCodec API that was introduced in
33424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // JellyBean, and also currently needs NEON support for the FFT.
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  enable_webaudio =
35424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      (base::android::BuildInfo::GetInstance()->sdk_int() >= 16) &&
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      ((android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0);
37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif  // defined(ARCH_CPU_ARMEL)
387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  WebRuntimeFeatures::enableWebAudio(enable_webaudio);
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Android does not support the Gamepad API.
407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  WebRuntimeFeatures::enableGamepad(false);
417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Android does not have support for PagePopup
427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  WebRuntimeFeatures::enablePagePopup(false);
437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // datalist on Android is not enabled
447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  WebRuntimeFeatures::enableDataListElement(false);
45a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif  // defined(OS_ANDROID)
467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void SetRuntimeFeaturesDefaultsAndUpdateFromArgs(
497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    const CommandLine& command_line) {
507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  WebRuntimeFeatures::enableStableFeatures(true);
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  if (command_line.HasSwitch(switches::kEnableExperimentalWebPlatformFeatures))
537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableExperimentalFeatures(true);
547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  SetRuntimeFeatureDefaultsForPlatform();
567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableDatabases))
587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableDatabase(false);
597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableApplicationCache))
617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableApplicationCache(false);
627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableDesktopNotifications))
647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableNotifications(false);
657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableLocalStorage))
677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableLocalStorage(false);
687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableSessionStorage))
707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableSessionStorage(false);
717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableGeolocation))
737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableGeolocation(false);
747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableWebKitMediaSource))
767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableWebKitMediaSource(false);
777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_ANDROID)
797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableWebRTC)) {
807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableMediaStream(false);
817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enablePeerConnection(false);
827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
84a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  if (!command_line.HasSwitch(switches::kEnableSpeechRecognition) ||
85a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      !command_line.HasSwitch(
86a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)          switches::kEnableExperimentalWebPlatformFeatures)) {
877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableScriptedSpeech(false);
88a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  }
897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif
907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableWebAudio))
927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableWebAudio(false);
937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableFullScreen))
957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableFullscreen(false);
967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kEnableEncryptedMedia))
987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableEncryptedMedia(true);
997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableLegacyEncryptedMedia))
1017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableLegacyEncryptedMedia(false);
1027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  if (command_line.HasSwitch(switches::kEnableWebAnimationsCSS))
1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    WebRuntimeFeatures::enableWebAnimationsCSS();
1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  if (command_line.HasSwitch(switches::kEnableWebAnimationsSVG))
1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    WebRuntimeFeatures::enableWebAnimationsSVG();
1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kEnableWebMIDI))
1107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableWebMIDI(true);
1117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
112a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#if defined(OS_ANDROID)
113a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Enable Device Motion on Android by default.
114a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  WebRuntimeFeatures::enableDeviceMotion(
115a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      !command_line.HasSwitch(switches::kDisableDeviceMotion));
116a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#else
1177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kEnableDeviceMotion))
1187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      WebRuntimeFeatures::enableDeviceMotion(true);
119a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif
1207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableDeviceOrientation))
1227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableDeviceOrientation(false);
1237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableSpeechInput))
1257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableSpeechInput(false);
1267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableFileSystem))
1287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableFileSystem(false);
1297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kEnableExperimentalCanvasFeatures))
1317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableExperimentalCanvasFeatures(true);
1327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kEnableSpeechSynthesis))
1347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableSpeechSynthesis(true);
1357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kEnableWebGLDraftExtensions))
1377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableWebGLDraftExtensions(true);
138ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
139ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  if (command_line.HasSwitch(switches::kEnableHTMLImports))
140ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    WebRuntimeFeatures::enableHTMLImports(true);
141c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch
142c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  if (command_line.HasSwitch(switches::kEnableOverlayScrollbars))
143c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch    WebRuntimeFeatures::enableOverlayScrollbars(true);
144424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
145424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  if (command_line.HasSwitch(switches::kEnableInputModeAttribute))
146424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    WebRuntimeFeatures::enableInputModeAttribute(true);
1477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
1487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}  // namespace content
150