runtime_features.cc revision 010d83a9304c5a91596085d917d248abff47903a
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" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/common/content_switches_internal.h" 97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/common/content_switches.h" 107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebRuntimeFeatures.h" 1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "ui/native_theme/native_theme_switches.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_ANDROID) 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include <cpu-features.h> 158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "media/base/android/media_codec_bridge.h" 167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebRuntimeFeatures; 197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace content { 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)static void SetRuntimeFeatureDefaultsForPlatform() { 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_ANDROID) 248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // MSE/EME implementation needs Android MediaCodec API. 258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!media::MediaCodecBridge::IsAvailable()) { 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) WebRuntimeFeatures::enableMediaSource(false); 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) WebRuntimeFeatures::enablePrefixedEncryptedMedia(false); 280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch WebRuntimeFeatures::enableEncryptedMedia(false); 29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // WebAudio is enabled by default on ARM and X86 and only when the 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // MediaCodec API is available. 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) WebRuntimeFeatures::enableWebAudio( 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) media::MediaCodecBridge::IsAvailable() && 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ((android_getCpuFamily() == ANDROID_CPU_FAMILY_ARM) || 35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch (android_getCpuFamily() == ANDROID_CPU_FAMILY_X86))); 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); 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Android does not yet support the Web Notification API. crbug.com/115320 4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WebRuntimeFeatures::enableNotifications(false); 421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Android does not yet support SharedWorker. crbug.com/154571 431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) WebRuntimeFeatures::enableSharedWorker(false); 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Android does not yet support NavigatorContentUtils. 45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) WebRuntimeFeatures::enableNavigatorContentUtils(false); 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebRuntimeFeatures::enableTouchIconLoading(true); 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebRuntimeFeatures::enableOrientationEvent(true); 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#else 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebRuntimeFeatures::enableNavigatorContentUtils(true); 50a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif // defined(OS_ANDROID) 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void SetRuntimeFeaturesDefaultsAndUpdateFromArgs( 547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const CommandLine& command_line) { 557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (command_line.HasSwitch(switches::kEnableExperimentalWebPlatformFeatures)) 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableExperimentalFeatures(true); 577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SetRuntimeFeatureDefaultsForPlatform(); 597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableDatabases)) 617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableDatabase(false); 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableApplicationCache)) 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableApplicationCache(false); 657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableDesktopNotifications)) 677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableNotifications(false); 687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableNavigatorContentUtils)) 70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) WebRuntimeFeatures::enableNavigatorContentUtils(false); 71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableLocalStorage)) 737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableLocalStorage(false); 747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableSessionStorage)) 767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableSessionStorage(false); 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 78a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (command_line.HasSwitch(switches::kDisableMediaSource)) 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) WebRuntimeFeatures::enableMediaSource(false); 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableSharedWorkers)) 821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) WebRuntimeFeatures::enableSharedWorker(false); 831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_ANDROID) 857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableWebRTC)) { 867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableMediaStream(false); 877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enablePeerConnection(false); 887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 90d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (!command_line.HasSwitch(switches::kEnableSpeechRecognition)) 917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableScriptedSpeech(false); 927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif 937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (command_line.HasSwitch(switches::kEnableServiceWorker)) 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) WebRuntimeFeatures::enableServiceWorker(true); 964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 97a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(OS_ANDROID) 98effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // WebAudio is enabled by default on ARM and X86, if the MediaCodec 99effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // API is available. 100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) WebRuntimeFeatures::enableWebAudio( 101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableWebAudio) && 102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) media::MediaCodecBridge::IsAvailable()); 103a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#else 1047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableWebAudio)) 1057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableWebAudio(false); 106a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif 1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableEncryptedMedia)) 1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableEncryptedMedia(true); 1107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (command_line.HasSwitch(switches::kDisablePrefixedEncryptedMedia)) 1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) WebRuntimeFeatures::enablePrefixedEncryptedMedia(false); 1137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (command_line.HasSwitch(switches::kEnableWebAnimationsSVG)) 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) WebRuntimeFeatures::enableWebAnimationsSVG(true); 1167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableWebMIDI)) 1187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebRuntimeFeatures::enableWebMIDI(true); 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 1324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (command_line.HasSwitch(switches::kEnableOverlayFullscreenVideo)) 1334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) WebRuntimeFeatures::enableOverlayFullscreenVideo(true); 1344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 13523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (ui::IsOverlayScrollbarEnabled()) 136c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch WebRuntimeFeatures::enableOverlayScrollbars(true); 137424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 138effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (command_line.HasSwitch(switches::kEnableFastTextAutosizing) 139effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch && !command_line.HasSwitch(switches::kDisableFastTextAutosizing)) 1404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) WebRuntimeFeatures::enableFastTextAutosizing(true); 1410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableRepaintAfterLayout)) 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebRuntimeFeatures::enableRepaintAfterLayout(false); 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableRepaintAfterLayout)) 1460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) WebRuntimeFeatures::enableRepaintAfterLayout(true); 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableTargetedStyleRecalc)) 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebRuntimeFeatures::enableTargetedStyleRecalc(true); 150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableBleedingEdgeRenderingFastPaths)) 152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) WebRuntimeFeatures::enableBleedingEdgeFastPaths(true); 153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (command_line.HasSwitch(switches::kEnablePreciseMemoryInfo)) 155010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) WebRuntimeFeatures::enablePreciseMemoryInfo(true); 1567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace content 159