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