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) 32bfebf9c5f0206a13e1fdcf6343cc432a1d5fe776Torne (Richard Coles) // WebAudio needs Android MediaCodec API that was introduced in 33bfebf9c5f0206a13e1fdcf6343cc432a1d5fe776Torne (Richard Coles) // JellyBean, and also currently needs NEON support for the FFT. 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch enable_webaudio = 35bfebf9c5f0206a13e1fdcf6343cc432a1d5fe776Torne (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); 1384311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 1394311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch if (command_line.HasSwitch(switches::kEnableHTMLImports)) 1404311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch WebRuntimeFeatures::enableHTMLImports(true); 141f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch 142f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch if (command_line.HasSwitch(switches::kEnableOverlayScrollbars)) 143f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch WebRuntimeFeatures::enableOverlayScrollbars(true); 1447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace content 147