Title: [106604] branches/chromium/1025/Source/WebCore/dom
Revision
106604
Author
[email protected]
Date
2012-02-02 16:47:26 -0800 (Thu, 02 Feb 2012)

Log Message

Merge 106603 - BMW Car Configuration Page doesn't work (Only manifests in Chromium)
https://bugs.webkit.org/show_bug.cgi?id=77312

Reviewed by Dimitri Glazkov.

When we autogenerated the event factory, we missed the check for
whether touch events were enabled at runtime:
http://trac.webkit.org/changeset/97933/trunk/Source/WebCore/dom/Document.cpp

This patch adds the check back.

Unfortunately, there isn't a testing frame work for
RuntimeEnabledFeatures.  The main difficulty is that these static bools
need to be set when WebKit is initialized and can't be changed (which
is why they're not part of WebCore::Settings).  To test them properly,
we'd need a testing framework that booted up WebKit for each test.

We could test this particular change (which doesn't need the bool to be
constant through the runtime of WebKit), but that would create a
sandtrap for future patches who might thing that this testing framework
can really be used to test RuntimeEnabledFeatures.

The net result is that Chromium is going to end up living with the
non-default codepath for these settings being untested, which will lead
to regressions like this one.  If we ened up with a bunch of these
regressions, we'll likely end up with a testing framework similar to
Chromium's browsers_tests, which create a fresh subprocess for each
test.

* dom/EventFactory.in:
* dom/make_event_factory.pl:
(defaultItemFactory):
(generateImplementation):


[email protected]
Review URL: https://chromiumcodereview.appspot.com/9325015

Modified Paths

Diff

Modified: branches/chromium/1025/Source/WebCore/dom/EventFactory.in (106603 => 106604)


--- branches/chromium/1025/Source/WebCore/dom/EventFactory.in	2012-02-03 00:26:10 UTC (rev 106603)
+++ branches/chromium/1025/Source/WebCore/dom/EventFactory.in	2012-02-03 00:47:26 UTC (rev 106604)
@@ -37,9 +37,8 @@
 SVGZoomEvent conditional=SVG
 SVGZoomEvents interfaceName=SVGZoomEvent, conditional=SVG
 IDBVersionChangeEvent conditional=INDEXED_DATABASE
-TouchEvent conditional=TOUCH_EVENTS
+TouchEvent conditional=TOUCH_EVENTS, runtimeConditional=touchEnabled
 DeviceMotionEvent conditional=DEVICE_ORIENTATION
 DeviceOrientationEvent conditional=DEVICE_ORIENTATION
 OrientationEvent interfaceName=Event, conditional=ORIENTATION_EVENTS
 TrackEvent conditional=VIDEO_TRACK
-

Modified: branches/chromium/1025/Source/WebCore/dom/make_event_factory.pl (106603 => 106604)


--- branches/chromium/1025/Source/WebCore/dom/make_event_factory.pl	2012-02-03 00:26:10 UTC (rev 106603)
+++ branches/chromium/1025/Source/WebCore/dom/make_event_factory.pl	2012-02-03 00:47:26 UTC (rev 106604)
@@ -42,7 +42,8 @@
 {
     return (
         'interfaceName' => 0,
-        'conditional' => 0
+        'conditional' => 0,
+        'runtimeConditional' => 0
     );
 }
 
@@ -85,6 +86,9 @@
     print F "#include \"${namespace}Factory.h\"\n";
     print F "\n";
     print F "#include \"${namespace}Headers.h\"\n";
+    print F "#if USE(V8)\n";
+    print F "#include \"RuntimeEnabledFeatures.h\"\n";
+    print F "#endif\n";
     print F "\n";
     print F "namespace WebCore {\n";
     print F "\n";
@@ -93,11 +97,20 @@
 
     for my $eventName (sort keys %parsedEvents) {
         my $conditional = $parsedEvents{$eventName}{"conditional"};
+        my $runtimeConditional = $parsedEvents{$eventName}{"runtimeConditional"};
         my $interfaceName = $InCompiler->interfaceForItem($eventName);
 
         print F "#if ENABLE($conditional)\n" if $conditional;
+        if ($runtimeConditional) {
+            print F "    #if USE(V8)\n";
+            print F "    // FIXME: JSC should support RuntimeEnabledFeatures as well.\n";
+            print F "    if (type == \"$eventName\" && RuntimeEnabledFeatures::$runtimeConditional())\n";
+            print F "        return ${interfaceName}::create();\n";
+            print F "    #else\n";
+        }
         print F "    if (type == \"$eventName\")\n";
         print F "        return ${interfaceName}::create();\n";
+        print F "#endif // USE(V8)\n" if $runtimeConditional;
         print F "#endif\n" if $conditional;
     }
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to