runtime_features.cc revision 7d4cd473f85ac64c3747c96c277f9e506a0d2246
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "content/child/runtime_features.h" 6 7#include "base/command_line.h" 8#include "content/public/common/content_switches.h" 9#include "third_party/WebKit/public/web/WebRuntimeFeatures.h" 10 11#if defined(OS_ANDROID) 12#include <cpu-features.h> 13#endif 14 15using WebKit::WebRuntimeFeatures; 16 17namespace content { 18 19static void SetRuntimeFeatureDefaultsForPlatform() { 20#if defined(OS_ANDROID) && !defined(GOOGLE_TV) 21 WebRuntimeFeatures::enableWebKitMediaSource(false); 22 WebRuntimeFeatures::enableLegacyEncryptedMedia(false); 23 WebRuntimeFeatures::enableEncryptedMedia(false); 24#endif 25 26#if defined(OS_ANDROID) 27 bool enable_webaudio = true; 28#if defined(ARCH_CPU_ARMEL) 29 enable_webaudio = 30 ((android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0); 31#endif 32 WebRuntimeFeatures::enableWebAudio(enable_webaudio); 33 // Android does not support the Gamepad API. 34 WebRuntimeFeatures::enableGamepad(false); 35 // input[type=week] in Android is incomplete. crbug.com/135938 36 WebRuntimeFeatures::enableInputTypeWeek(false); 37 // Android does not have support for PagePopup 38 WebRuntimeFeatures::enablePagePopup(false); 39 // datalist on Android is not enabled 40 WebRuntimeFeatures::enableDataListElement(false); 41#endif 42} 43 44void SetRuntimeFeaturesDefaultsAndUpdateFromArgs( 45 const CommandLine& command_line) { 46 WebRuntimeFeatures::enableStableFeatures(true); 47 48 if (command_line.HasSwitch(switches::kEnableExperimentalWebKitFeatures)) 49 WebRuntimeFeatures::enableExperimentalFeatures(true); 50 51 SetRuntimeFeatureDefaultsForPlatform(); 52 53 if (command_line.HasSwitch(switches::kDisableDatabases)) 54 WebRuntimeFeatures::enableDatabase(false); 55 56 if (command_line.HasSwitch(switches::kDisableApplicationCache)) 57 WebRuntimeFeatures::enableApplicationCache(false); 58 59 if (command_line.HasSwitch(switches::kDisableDesktopNotifications)) 60 WebRuntimeFeatures::enableNotifications(false); 61 62 if (command_line.HasSwitch(switches::kDisableLocalStorage)) 63 WebRuntimeFeatures::enableLocalStorage(false); 64 65 if (command_line.HasSwitch(switches::kDisableSessionStorage)) 66 WebRuntimeFeatures::enableSessionStorage(false); 67 68 if (command_line.HasSwitch(switches::kDisableGeolocation)) 69 WebRuntimeFeatures::enableGeolocation(false); 70 71#if defined(OS_ANDROID) && !defined(GOOGLE_TV) 72 if (command_line.HasSwitch(switches::kEnableWebKitMediaSource)) 73 WebRuntimeFeatures::enableWebKitMediaSource(true); 74#else 75 if (command_line.HasSwitch(switches::kDisableWebKitMediaSource)) 76 WebRuntimeFeatures::enableWebKitMediaSource(false); 77#endif 78 79#if defined(OS_ANDROID) 80 if (command_line.HasSwitch(switches::kDisableWebRTC)) { 81 WebRuntimeFeatures::enableMediaStream(false); 82 WebRuntimeFeatures::enablePeerConnection(false); 83 } 84 85 if (!command_line.HasSwitch(switches::kEnableSpeechRecognition)) 86 WebRuntimeFeatures::enableScriptedSpeech(false); 87#endif 88 89 if (command_line.HasSwitch(switches::kDisableWebAudio)) 90 WebRuntimeFeatures::enableWebAudio(false); 91 92 if (command_line.HasSwitch(switches::kDisableFullScreen)) 93 WebRuntimeFeatures::enableFullscreen(false); 94 95 if (command_line.HasSwitch(switches::kEnableEncryptedMedia)) 96 WebRuntimeFeatures::enableEncryptedMedia(true); 97 98 if (command_line.HasSwitch(switches::kDisableLegacyEncryptedMedia)) 99 WebRuntimeFeatures::enableLegacyEncryptedMedia(false); 100 101 if (command_line.HasSwitch(switches::kEnableWebMIDI)) 102 WebRuntimeFeatures::enableWebMIDI(true); 103 104 if (command_line.HasSwitch(switches::kEnableDeviceMotion)) 105 WebRuntimeFeatures::enableDeviceMotion(true); 106 107 if (command_line.HasSwitch(switches::kDisableDeviceOrientation)) 108 WebRuntimeFeatures::enableDeviceOrientation(false); 109 110 if (command_line.HasSwitch(switches::kDisableSpeechInput)) 111 WebRuntimeFeatures::enableSpeechInput(false); 112 113 if (command_line.HasSwitch(switches::kDisableFileSystem)) 114 WebRuntimeFeatures::enableFileSystem(false); 115 116 if (command_line.HasSwitch(switches::kDisableJavaScriptI18NAPI)) 117 WebRuntimeFeatures::enableJavaScriptI18NAPI(false); 118 119 if (command_line.HasSwitch(switches::kEnableExperimentalCanvasFeatures)) 120 WebRuntimeFeatures::enableExperimentalCanvasFeatures(true); 121 122 if (command_line.HasSwitch(switches::kEnableSpeechSynthesis)) 123 WebRuntimeFeatures::enableSpeechSynthesis(true); 124 125 if (command_line.HasSwitch(switches::kEnableWebGLDraftExtensions)) 126 WebRuntimeFeatures::enableWebGLDraftExtensions(true); 127 128 // Enabled by default for testing. 129 // TODO(urvang): Go back to using the command-line option after a few days. 130 // https://code.google.com/p/chromium/issues/detail?id=234437 131 WebRuntimeFeatures::enableWebPInAcceptHeader(true); 132} 133 134} // namespace content 135