runtime_features.cc revision d0247b1b59f9c528cb6df88b4f2b9afaf80d181e
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);
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Android does not yet support the Web Notification API. crbug.com/115320
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  WebRuntimeFeatures::enableNotifications(false);
47a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif  // defined(OS_ANDROID)
487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void SetRuntimeFeaturesDefaultsAndUpdateFromArgs(
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    const CommandLine& command_line) {
527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  WebRuntimeFeatures::enableStableFeatures(true);
537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  if (command_line.HasSwitch(switches::kEnableExperimentalWebPlatformFeatures))
557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableExperimentalFeatures(true);
567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  SetRuntimeFeatureDefaultsForPlatform();
587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableDatabases))
607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableDatabase(false);
617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableApplicationCache))
637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableApplicationCache(false);
647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableDesktopNotifications))
667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableNotifications(false);
677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableLocalStorage))
697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableLocalStorage(false);
707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableSessionStorage))
727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableSessionStorage(false);
737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableGeolocation))
757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableGeolocation(false);
767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableWebKitMediaSource))
787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableWebKitMediaSource(false);
797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_ANDROID)
817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableWebRTC)) {
827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableMediaStream(false);
837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enablePeerConnection(false);
847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  if (!command_line.HasSwitch(switches::kEnableSpeechRecognition))
877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableScriptedSpeech(false);
887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif
897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableWebAudio))
917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableWebAudio(false);
927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableFullScreen))
947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableFullscreen(false);
957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kEnableEncryptedMedia))
977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableEncryptedMedia(true);
987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableLegacyEncryptedMedia))
1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableLegacyEncryptedMedia(false);
1017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  if (command_line.HasSwitch(switches::kEnableWebAnimationsCSS))
1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    WebRuntimeFeatures::enableWebAnimationsCSS();
1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  if (command_line.HasSwitch(switches::kEnableWebAnimationsSVG))
1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    WebRuntimeFeatures::enableWebAnimationsSVG();
1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kEnableWebMIDI))
1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableWebMIDI(true);
1107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
111d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableDeviceMotion))
112d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    WebRuntimeFeatures::enableDeviceMotion(false);
1137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableDeviceOrientation))
1157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableDeviceOrientation(false);
1167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableSpeechInput))
1187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableSpeechInput(false);
1197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableFileSystem))
1217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableFileSystem(false);
1227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kEnableExperimentalCanvasFeatures))
1247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableExperimentalCanvasFeatures(true);
1257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kEnableSpeechSynthesis))
1277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableSpeechSynthesis(true);
1287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kEnableWebGLDraftExtensions))
1307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableWebGLDraftExtensions(true);
131ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
132ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  if (command_line.HasSwitch(switches::kEnableHTMLImports))
133ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    WebRuntimeFeatures::enableHTMLImports(true);
134c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch
135c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  if (command_line.HasSwitch(switches::kEnableOverlayScrollbars))
136c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch    WebRuntimeFeatures::enableOverlayScrollbars(true);
137424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
138424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  if (command_line.HasSwitch(switches::kEnableInputModeAttribute))
139424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    WebRuntimeFeatures::enableInputModeAttribute(true);
1407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
1417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}  // namespace content
143