Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(341)

Side by Side Diff: Source/core/page/RuntimeCSSEnabled.cpp

Issue 14324009: Add support for disabling CSS Properties at runtime (Closed) Base URL: http://src.chromium.org/blink/trunk/Source/
Patch Set: Runtime guard more uses of CSSPropertyID, per Elliot's request. Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above
9 * copyright notice, this list of conditions and the following
10 * disclaimer.
11 * 2. Redistributions in binary form must reproduce the above
12 * copyright notice, this list of conditions and the following
13 * disclaimer in the documentation and/or other materials
14 * provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
19 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
20 * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
21 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
25 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
27 * OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30 #include "config.h"
31 #include "core/page/RuntimeCSSEnabled.h"
32 #include "core/page/RuntimeEnabledFeatures.h"
33 #include "wtf/Vector.h"
34
35 namespace WebCore {
36
37 // FIXME: We should use a real BitVector class instead!
38 typedef Vector<bool> BoolVector;
39
40 static void setCSSPropertiesEnabled(CSSPropertyID* properties, size_t length, bo ol featureFlag)
41 {
42 for (size_t i = 0; i < length; i++)
43 RuntimeCSSEnabled::setCSSPropertyEnabled(properties[i], featureFlag);
44 }
45
46 static void setPropertySwitchesFromRuntimeFeatures(BoolVector& properties)
47 {
48 #if ENABLE(CSS_REGIONS)
49 CSSPropertyID regionProperites[] = {
50 CSSPropertyWebkitFlowInto,
51 CSSPropertyWebkitFlowFrom,
52 CSSPropertyWebkitRegionOverflow,
53 CSSPropertyWebkitRegionBreakAfter,
54 CSSPropertyWebkitRegionBreakBefore,
55 CSSPropertyWebkitRegionBreakInside
56 };
57 setCSSPropertiesEnabled(regionProperites, WTF_ARRAY_LENGTH(regionProperites) , RuntimeEnabledFeatures::cssRegionsEnabled());
58 #endif
59 #if ENABLE(CSS_EXCLUSIONS)
60 CSSPropertyID exclusionProperties[] = {
61 CSSPropertyWebkitWrap,
62 CSSPropertyWebkitWrapFlow,
63 CSSPropertyWebkitShapeMargin,
64 CSSPropertyWebkitShapePadding,
65 CSSPropertyWebkitWrapThrough,
66 CSSPropertyWebkitShapeInside,
67 CSSPropertyWebkitShapeOutside,
68 };
69 setCSSPropertiesEnabled(exclusionProperties, WTF_ARRAY_LENGTH(exclusionPrope rties), RuntimeEnabledFeatures::cssExclusionsEnabled());
70 #endif
71 #if ENABLE(CSS_COMPOSITING)
72 RuntimeCSSEnabled::setCSSPropertyEnabled(CSSPropertyBackgroundBlendMode, Run timeEnabledFeatures::cssCompositingEnabled());
73 RuntimeCSSEnabled::setCSSPropertyEnabled(CSSPropertyWebkitBlendMode, Runtime EnabledFeatures::cssCompositingEnabled());
74 #endif
75 }
76
77 static BoolVector& propertySwitches()
78 {
79 static BoolVector* switches = 0;
80 if (!switches) {
81 switches = new BoolVector;
82 switches->fill(true, numCSSProperties);
83 setPropertySwitchesFromRuntimeFeatures(*switches);
84 }
85 return *switches;
86 }
87
88 size_t indexForProperty(CSSPropertyID propertyId)
89 {
90 RELEASE_ASSERT(propertyId >= firstCSSProperty && propertyId <= lastCSSProper ty);
91 // Values all start at 0. Vector RELEASE_ASSERTS will catch if we're ever w rong.
92 return static_cast<size_t>(propertyId - firstCSSProperty);
93 }
94
95 bool RuntimeCSSEnabled::isCSSPropertyEnabled(CSSPropertyID propertyId)
96 {
97 return propertySwitches()[indexForProperty(propertyId)];
98 }
99
100 void RuntimeCSSEnabled::setCSSPropertyEnabled(CSSPropertyID propertyId, bool ena ble)
101 {
102 propertySwitches()[indexForProperty(propertyId)] = enable;
103 }
104
105 void RuntimeCSSEnabled::filterEnabledCSSPropertiesIntoVector(const CSSPropertyID * properties, size_t propertyCount, Vector<CSSPropertyID>& outVector)
106 {
107 for (unsigned i = 0; i < propertyCount; i++) {
108 CSSPropertyID property = properties[i];
109 if (RuntimeCSSEnabled::isCSSPropertyEnabled(property))
110 outVector.append(property);
111 }
112 }
113
114 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/page/RuntimeCSSEnabled.h ('k') | Tools/DumpRenderTree/chromium/TestRunner/public/WebPreferences.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698