runtime_features.cc revision ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16
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)
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  enable_webaudio =
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      ((android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0);
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);
42a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif  // defined(OS_ANDROID)
437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void SetRuntimeFeaturesDefaultsAndUpdateFromArgs(
467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    const CommandLine& command_line) {
477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  WebRuntimeFeatures::enableStableFeatures(true);
487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  if (command_line.HasSwitch(switches::kEnableExperimentalWebPlatformFeatures))
507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableExperimentalFeatures(true);
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  SetRuntimeFeatureDefaultsForPlatform();
537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableDatabases))
557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableDatabase(false);
567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableApplicationCache))
587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableApplicationCache(false);
597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableDesktopNotifications))
617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableNotifications(false);
627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableLocalStorage))
647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableLocalStorage(false);
657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableSessionStorage))
677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableSessionStorage(false);
687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableGeolocation))
707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableGeolocation(false);
717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableWebKitMediaSource))
737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableWebKitMediaSource(false);
747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_ANDROID)
767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableWebRTC)) {
777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableMediaStream(false);
787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enablePeerConnection(false);
797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
81a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  if (!command_line.HasSwitch(switches::kEnableSpeechRecognition) ||
82a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      !command_line.HasSwitch(
83a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)          switches::kEnableExperimentalWebPlatformFeatures)) {
847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableScriptedSpeech(false);
85a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  }
867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif
877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableWebAudio))
897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableWebAudio(false);
907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableFullScreen))
927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableFullscreen(false);
937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kEnableEncryptedMedia))
957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableEncryptedMedia(true);
967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableLegacyEncryptedMedia))
987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableLegacyEncryptedMedia(false);
997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  if (command_line.HasSwitch(switches::kEnableWebAnimationsCSS))
1017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    WebRuntimeFeatures::enableWebAnimationsCSS();
1027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  if (command_line.HasSwitch(switches::kEnableWebAnimationsSVG))
1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    WebRuntimeFeatures::enableWebAnimationsSVG();
1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kEnableWebMIDI))
1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableWebMIDI(true);
1087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
109a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#if defined(OS_ANDROID)
110a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Enable Device Motion on Android by default.
111a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  WebRuntimeFeatures::enableDeviceMotion(
112a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      !command_line.HasSwitch(switches::kDisableDeviceMotion));
113a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#else
1147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kEnableDeviceMotion))
1157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      WebRuntimeFeatures::enableDeviceMotion(true);
116a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif
1177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableDeviceOrientation))
1197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableDeviceOrientation(false);
1207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableSpeechInput))
1227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableSpeechInput(false);
1237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kDisableFileSystem))
1257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableFileSystem(false);
1267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kEnableExperimentalCanvasFeatures))
1287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableExperimentalCanvasFeatures(true);
1297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kEnableSpeechSynthesis))
1317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableSpeechSynthesis(true);
1327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (command_line.HasSwitch(switches::kEnableWebGLDraftExtensions))
1347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WebRuntimeFeatures::enableWebGLDraftExtensions(true);
135ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
136ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  if (command_line.HasSwitch(switches::kEnableHTMLImports))
137ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    WebRuntimeFeatures::enableHTMLImports(true);
1387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
1397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}  // namespace content
141