[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

japhet at chromium.org japhet at chromium.org
Wed Dec 22 13:41:50 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit f5d746be8b81d6fa7729d9d4c757f64ec50a14cc
Author: japhet at chromium.org <japhet at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Sep 23 18:02:15 2010 +0000

    2010-09-23  Nate Chapin  <japhet at chromium.org>
    
            Reviewed by Darin Fisher.
    
            Implement <a ping> (disabled by default).
            https://bugs.webkit.org/show_bug.cgi?id=30458
    
            Tests: http/tests/navigation/ping-cross-origin-from-https.html
                   http/tests/navigation/ping-cross-origin.html
                   http/tests/navigation/ping-same-origin.html
    
            * html/HTMLAnchorElement.cpp:
            (WebCore::HTMLAnchorElement::defaultEventHandler):
            (WebCore::HTMLAnchorElement::sendPings):
            * html/HTMLAnchorElement.h:
            * html/HTMLAttributeNames.in:
            * loader/PingLoader.cpp:
            (WebCore::PingLoader::sendPing): Set ping-specific headers.
            (WebCore::PingLoader::PingLoader):
            * loader/PingLoader.h:
            (WebCore::PingLoader::timeout): Ensure pings eventually timeout, since
                the normal cancel mechanism can't stop them.
            * page/Settings.cpp:
            * page/Settings.h: Add hyperlinkAuditingEnabled.
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@68166 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index d83e98d..8a39652 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,23 @@
+2010-09-23  Nate Chapin  <japhet at chromium.org>
+
+        Reviewed by Darin Fisher.
+      
+        Tests for <a ping>, plus a rewrite of the other test of similar
+        load functionality (image-load-in-unload-handler.html). All these tests
+        now dump their interesting http headers (content type, request method,
+        referrer, and ping-specific headers).
+        https://bugs.webkit.org/show_bug.cgi?id=30458
+
+        * http/tests/navigation/image-load-in-unload-handler-expected.txt:
+        * http/tests/navigation/ping-cross-origin-expected.txt: Added.
+        * http/tests/navigation/ping-cross-origin-from-https-expected.txt: Added.
+        * http/tests/navigation/ping-cross-origin-from-https.html: Added.
+        * http/tests/navigation/ping-cross-origin.html: Added.
+        * http/tests/navigation/ping-same-origin-expected.txt: Added.
+        * http/tests/navigation/ping-same-origin.html: Added.
+        * http/tests/navigation/resources/check-ping.php:
+        * http/tests/navigation/resources/save-ping.php:
+  
 2010-09-23  Jeremy Orlow  <jorlow at chromium.org>
 
         Reviewed by Steve Block.
diff --git a/LayoutTests/http/tests/navigation/image-load-in-unload-handler-expected.txt b/LayoutTests/http/tests/navigation/image-load-in-unload-handler-expected.txt
index 4c73526..0ab3e9b 100644
--- a/LayoutTests/http/tests/navigation/image-load-in-unload-handler-expected.txt
+++ b/LayoutTests/http/tests/navigation/image-load-in-unload-handler-expected.txt
@@ -1,2 +1,4 @@
 main frame - has 1 onunload handler(s)
-PASS
+Ping sent successfully
+HTTP_REFERER: http://127.0.0.1:8000/navigation/image-load-in-unload-handler.html
+REQUEST_METHOD: GET
diff --git a/LayoutTests/http/tests/navigation/ping-cross-origin-expected.txt b/LayoutTests/http/tests/navigation/ping-cross-origin-expected.txt
new file mode 100644
index 0000000..a28fcb4
--- /dev/null
+++ b/LayoutTests/http/tests/navigation/ping-cross-origin-expected.txt
@@ -0,0 +1,5 @@
+Ping sent successfully
+CONTENT_TYPE: text/ping
+HTTP_PING_TO: http://127.0.0.1:8000/navigation/resources/check-ping.php
+HTTP_REFERER: http://127.0.0.1:8000/navigation/ping-cross-origin.html
+REQUEST_METHOD: POST
diff --git a/LayoutTests/http/tests/navigation/ping-cross-origin-from-https-expected.txt b/LayoutTests/http/tests/navigation/ping-cross-origin-from-https-expected.txt
new file mode 100644
index 0000000..5b9614c
--- /dev/null
+++ b/LayoutTests/http/tests/navigation/ping-cross-origin-from-https-expected.txt
@@ -0,0 +1,4 @@
+Ping sent successfully
+CONTENT_TYPE: text/ping
+HTTP_PING_TO: https://127.0.0.1:8443/navigation/resources/check-ping.php
+REQUEST_METHOD: POST
diff --git a/LayoutTests/http/tests/navigation/ping-cross-origin-from-https.html b/LayoutTests/http/tests/navigation/ping-cross-origin-from-https.html
new file mode 100644
index 0000000..b4859d3
--- /dev/null
+++ b/LayoutTests/http/tests/navigation/ping-cross-origin-from-https.html
@@ -0,0 +1,13 @@
+<html><head>
+<title>Ping</title>
+<script>
+
+if (window.layoutTestController) {
+    layoutTestController.dumpAsText();
+    layoutTestController.waitUntilDone();
+}
+
+if (location.protocol != "https:")
+    location = "https://127.0.0.1:8443/navigation/ping-cross-origin.html"
+</script>
+</head></html>
diff --git a/LayoutTests/http/tests/navigation/ping-cross-origin.html b/LayoutTests/http/tests/navigation/ping-cross-origin.html
new file mode 100644
index 0000000..9876980
--- /dev/null
+++ b/LayoutTests/http/tests/navigation/ping-cross-origin.html
@@ -0,0 +1,31 @@
+<html><head>
+<title>Ping</title>
+<script>
+
+var testCalled = false;
+
+function test() {
+    if (!testCalled) {
+        if (window.layoutTestController) {
+            layoutTestController.dumpAsText();
+            layoutTestController.overridePreference("WebKitHyperlinkAuditingEnabled", 1);
+            layoutTestController.waitUntilDone();
+        }
+        testCalled = true;
+        return;
+    }
+
+    if (window.eventSender) {
+        var a = document.getElementById("a");
+        eventSender.mouseMoveTo(a.offsetLeft + 2, a.offsetTop + 2);
+        eventSender.mouseDown();
+        eventSender.mouseUp();
+    }
+}
+
+</script>
+</head>
+<body onload="test();">
+<img src="resources/delete-ping.php" onload="test();" onerror="test();"></img>
+<a id="a" href="resources/check-ping.php" ping="http://localhost:8000/navigation/resources/save-ping.php">Navigate and send ping</a>
+</body></html>
diff --git a/LayoutTests/http/tests/navigation/ping-same-origin-expected.txt b/LayoutTests/http/tests/navigation/ping-same-origin-expected.txt
new file mode 100644
index 0000000..536d5db
--- /dev/null
+++ b/LayoutTests/http/tests/navigation/ping-same-origin-expected.txt
@@ -0,0 +1,5 @@
+Ping sent successfully
+CONTENT_TYPE: text/ping
+HTTP_PING_FROM: http://127.0.0.1:8000/navigation/ping-same-origin.html
+HTTP_PING_TO: http://127.0.0.1:8000/navigation/resources/check-ping.php
+REQUEST_METHOD: POST
diff --git a/LayoutTests/http/tests/navigation/ping-same-origin.html b/LayoutTests/http/tests/navigation/ping-same-origin.html
new file mode 100644
index 0000000..85d8eca
--- /dev/null
+++ b/LayoutTests/http/tests/navigation/ping-same-origin.html
@@ -0,0 +1,31 @@
+<html><head>
+<title>Ping</title>
+<script>
+
+var testCalled = false;
+
+function test() {
+    if (!testCalled) {
+        if (window.layoutTestController) {
+            layoutTestController.dumpAsText();
+            layoutTestController.overridePreference("WebKitHyperlinkAuditingEnabled", 1);
+            layoutTestController.waitUntilDone();
+        }
+        testCalled = true;
+        return;
+    }
+
+    if (window.eventSender) {
+        var a = document.getElementById("a");
+        eventSender.mouseMoveTo(a.offsetLeft + 2, a.offsetTop + 2);
+        eventSender.mouseDown();
+        eventSender.mouseUp();
+    }
+}
+
+</script>
+</head>
+<body onload="test();">
+<img src="resources/delete-ping.php" onload="test();" onerror="test();"></img>
+<a id="a" href="resources/check-ping.php" ping="resources/save-ping.php">Navigate and send ping</a>
+</body></html>
diff --git a/LayoutTests/http/tests/navigation/resources/check-ping.php b/LayoutTests/http/tests/navigation/resources/check-ping.php
index a9b5979..a0f2dd7 100644
--- a/LayoutTests/http/tests/navigation/resources/check-ping.php
+++ b/LayoutTests/http/tests/navigation/resources/check-ping.php
@@ -8,11 +8,18 @@ if (!file_exists("ping.txt")) {
     return;
 }
 
+echo "<html><body>\n";
+echo "Ping sent successfully";
+$pingFile = fopen("ping.txt", 'r');
+while ($line = fgets($pingFile)) {
+    echo "<br>";
+    echo trim($line);
+}
+fclose($pingFile);
 unlink("ping.txt");
-
-echo "PASS\n";
-echo "<script>\n";
-echo "if (window.layoutTestController)\n";
-echo "    layoutTestController.notifyDone();\n";
+echo "<script>";
+echo "if (window.layoutTestController)";
+echo "    layoutTestController.notifyDone();";
 echo "</script>";
+echo "</body></html>";
 ?>
diff --git a/LayoutTests/http/tests/navigation/resources/save-ping.php b/LayoutTests/http/tests/navigation/resources/save-ping.php
index 9446d47..589b97d 100644
--- a/LayoutTests/http/tests/navigation/resources/save-ping.php
+++ b/LayoutTests/http/tests/navigation/resources/save-ping.php
@@ -1,4 +1,10 @@
 <?php
 $pingFile = fopen("ping.txt", 'w');
+$httpHeaders = $_SERVER;
+ksort($httpHeaders, SORT_STRING);
+foreach ($httpHeaders as $name => $value) {
+    if ($name === "CONTENT_TYPE" || $name === "HTTP_REFERER" || $name === "HTTP_PING_TO" || $name === "HTTP_PING_FROM" || $name === "REQUEST_METHOD")
+        fwrite($pingFile, "$name: $value\n");
+}
 fclose($pingFile);
 ?>
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index e52ca81..529cef9 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,28 @@
+2010-09-23  Nate Chapin  <japhet at chromium.org>
+
+        Reviewed by Darin Fisher.
+        
+        Implement <a ping> (disabled by default).
+        https://bugs.webkit.org/show_bug.cgi?id=30458
+        
+        Tests: http/tests/navigation/ping-cross-origin-from-https.html
+               http/tests/navigation/ping-cross-origin.html
+               http/tests/navigation/ping-same-origin.html
+
+        * html/HTMLAnchorElement.cpp:
+        (WebCore::HTMLAnchorElement::defaultEventHandler):
+        (WebCore::HTMLAnchorElement::sendPings):
+        * html/HTMLAnchorElement.h:
+        * html/HTMLAttributeNames.in:
+        * loader/PingLoader.cpp:
+        (WebCore::PingLoader::sendPing): Set ping-specific headers.
+        (WebCore::PingLoader::PingLoader):
+        * loader/PingLoader.h:
+        (WebCore::PingLoader::timeout): Ensure pings eventually timeout, since
+            the normal cancel mechanism can't stop them.
+        * page/Settings.cpp:
+        * page/Settings.h: Add hyperlinkAuditingEnabled.
+
 2010-09-23  Steve VanDeBogart  <vandebo at chromium.org>
 
         Reviewed by David Levin.
diff --git a/WebCore/html/HTMLAnchorElement.cpp b/WebCore/html/HTMLAnchorElement.cpp
index 995552e..7684716 100644
--- a/WebCore/html/HTMLAnchorElement.cpp
+++ b/WebCore/html/HTMLAnchorElement.cpp
@@ -33,6 +33,7 @@
 #include "KeyboardEvent.h"
 #include "MouseEvent.h"
 #include "Page.h"
+#include "PingLoader.h"
 #include "RenderImage.h"
 #include "ResourceHandle.h"
 #include "Settings.h"
@@ -147,6 +148,7 @@ void HTMLAnchorElement::defaultEventHandler(Event* event)
             String url = deprecatedParseURL(getAttribute(hrefAttr));
             appendServerMapMousePosition(url, event);
             handleLinkClick(event, document(), url, getAttribute(targetAttr), hasRel(RelationNoReferrer));
+            sendPings(document()->completeURL(url));
             return;
         }
 
@@ -465,6 +467,16 @@ bool HTMLAnchorElement::isLiveLink() const
     return isLink() && treatLinkAsLiveForEventType(m_wasShiftKeyDownOnMouseDown ? MouseEventWithShiftKey : MouseEventWithoutShiftKey);
 }
 
+void HTMLAnchorElement::sendPings(const KURL& destinationURL)
+{
+    if (!hasAttribute(pingAttr) || !document()->settings()->hyperlinkAuditingEnabled())
+        return;
+
+    SpaceSplitString pingURLs(getAttribute(pingAttr), true);
+    for (unsigned i = 0; i < pingURLs.size(); i++)
+        PingLoader::sendPing(document()->frame(), document()->completeURL(pingURLs[i]), destinationURL);
+}
+
 HTMLAnchorElement::EventType HTMLAnchorElement::eventType(Event* event)
 {
     if (!event->isMouseEvent())
diff --git a/WebCore/html/HTMLAnchorElement.h b/WebCore/html/HTMLAnchorElement.h
index 16baff1..707d7c4 100644
--- a/WebCore/html/HTMLAnchorElement.h
+++ b/WebCore/html/HTMLAnchorElement.h
@@ -109,6 +109,8 @@ private:
     virtual short tabIndex() const;
     virtual bool draggable() const;
 
+    void sendPings(const KURL& destinationURL);
+
     enum EventType {
         MouseEventWithoutShiftKey,
         MouseEventWithShiftKey,
diff --git a/WebCore/html/HTMLAttributeNames.in b/WebCore/html/HTMLAttributeNames.in
index 103d2c6..d838615 100644
--- a/WebCore/html/HTMLAttributeNames.in
+++ b/WebCore/html/HTMLAttributeNames.in
@@ -229,6 +229,7 @@ optimum
 pattern
 placeholder
 pluginurl
+ping
 poster
 precision
 preload
diff --git a/WebCore/loader/PingLoader.cpp b/WebCore/loader/PingLoader.cpp
index 2a628ce..dd00128 100644
--- a/WebCore/loader/PingLoader.cpp
+++ b/WebCore/loader/PingLoader.cpp
@@ -32,6 +32,7 @@
 #include "config.h"
 #include "PingLoader.h"
 
+#include "FormData.h"
 #include "Frame.h"
 #include "ResourceHandle.h"
 #include "SecurityOrigin.h"
@@ -60,9 +61,40 @@ void PingLoader::loadImage(Frame* frame, const KURL& url)
     UNUSED_PARAM(leakedPingLoader);
 }
 
+// http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#hyperlink-auditing
+void PingLoader::sendPing(Frame* frame, const KURL& pingURL, const KURL& destinationURL)
+{
+    ResourceRequest request(pingURL);
+    request.setTargetType(ResourceRequest::TargetIsSubresource);
+    request.setHTTPMethod("POST");
+    request.setHTTPContentType("text/ping");
+    request.setHTTPBody(FormData::create("PING"));
+    request.setHTTPHeaderField("Cache-Control", "max-age=0");
+    frame->loader()->addExtraFieldsToSubresourceRequest(request);
+
+    SecurityOrigin* sourceOrigin = frame->document()->securityOrigin();
+    RefPtr<SecurityOrigin> pingOrigin = SecurityOrigin::create(pingURL);
+    FrameLoader::addHTTPOriginIfNeeded(request, sourceOrigin->toString());
+    request.setHTTPHeaderField("Ping-To", destinationURL);
+    if (sourceOrigin->isSameSchemeHostPort(pingOrigin.get()))
+        request.setHTTPHeaderField("Ping-From", frame->document()->url());
+    else if (!SecurityOrigin::shouldHideReferrer(pingURL, frame->loader()->outgoingReferrer()))
+        request.setHTTPReferrer(frame->loader()->outgoingReferrer());
+    OwnPtr<PingLoader> pingLoader = adoptPtr(new PingLoader(frame, request));
+    
+    // Leak the ping loader, since it will kill itself as soon as it receives a response.
+    PingLoader* leakedPingLoader = pingLoader.leakPtr();
+    UNUSED_PARAM(leakedPingLoader);
+}
+
 PingLoader::PingLoader(Frame* frame, const ResourceRequest& request)
+    : m_timeout(this, &PingLoader::timeout)
 {
     m_handle = ResourceHandle::create(frame->loader()->networkingContext(), request, this, false, false);
+
+    // If the server never responds, FrameLoader won't be able to cancel this load and
+    // we'll sit here waiting forever. Set a very generous timeout, just in case.
+    m_timeout.startOneShot(60000);
 }
 
 PingLoader::~PingLoader()
diff --git a/WebCore/loader/PingLoader.h b/WebCore/loader/PingLoader.h
index e26a9c9..eb43166 100644
--- a/WebCore/loader/PingLoader.h
+++ b/WebCore/loader/PingLoader.h
@@ -33,6 +33,7 @@
 #define PingLoader_h
 
 #include "ResourceHandleClient.h"
+#include "Timer.h"
 #include <wtf/Noncopyable.h>
 #include <wtf/RefPtr.h>
 
@@ -52,6 +53,7 @@ class ResourceResponse;
 class PingLoader : private ResourceHandleClient, public Noncopyable {
 public:
     static void loadImage(Frame*, const KURL& url);
+    static void sendPing(Frame*, const KURL& pingURL, const KURL& destinationURL);
 
     ~PingLoader();
 
@@ -62,8 +64,10 @@ private:
     void didReceiveData(ResourceHandle*, const char*, int) { delete this; }
     void didFinishLoading(ResourceHandle*, double) { delete this; }
     void didFail(ResourceHandle*, const ResourceError&) { delete this; }
+    void timeout(Timer<PingLoader>*) { delete this; }
 
     RefPtr<ResourceHandle> m_handle;
+    Timer<PingLoader> m_timeout;
 };
 
 }
diff --git a/WebCore/page/Settings.cpp b/WebCore/page/Settings.cpp
index fac0a5f..38fbe21 100644
--- a/WebCore/page/Settings.cpp
+++ b/WebCore/page/Settings.cpp
@@ -147,6 +147,7 @@ Settings::Settings(Page* page)
     , m_memoryInfoEnabled(false)
     , m_interactiveFormValidation(false)
     , m_usePreHTML5ParserQuirks(false)
+    , m_hyperlinkAuditingEnabled(false)
 {
     // A Frame may not have been created yet, so we initialize the AtomicString 
     // hash before trying to use it.
diff --git a/WebCore/page/Settings.h b/WebCore/page/Settings.h
index 99a4f23..85ce0c8 100644
--- a/WebCore/page/Settings.h
+++ b/WebCore/page/Settings.h
@@ -330,6 +330,9 @@ namespace WebCore {
         void setUsePreHTML5ParserQuirks(bool flag) { m_usePreHTML5ParserQuirks = flag; }
         bool usePreHTML5ParserQuirks() const { return m_usePreHTML5ParserQuirks; }
 
+        void setHyperlinkAuditingEnabled(bool flag) { m_hyperlinkAuditingEnabled = flag; }
+        bool hyperlinkAuditingEnabled() const { return m_hyperlinkAuditingEnabled; }
+
     private:
         Page* m_page;
 
@@ -417,6 +420,7 @@ namespace WebCore {
         bool m_memoryInfoEnabled: 1;
         bool m_interactiveFormValidation: 1;
         bool m_usePreHTML5ParserQuirks: 1;
+        bool m_hyperlinkAuditingEnabled : 1;
 
 #if USE(SAFARI_THEME)
         static bool gShouldPaintNativeControls;
diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index 28a4c82..a8b0fa8 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -1,3 +1,15 @@
+2010-09-23  Nate Chapin  <japhet at chromium.org>
+
+        Reviewed by Darin Fisher.
+
+        Add hyperlink auditing settings (i.e., <a ping>).
+        https://bugs.webkit.org/show_bug.cgi?id=30458
+
+        * public/WebSettings.h:
+        * src/WebSettingsImpl.cpp:
+        (WebKit::WebSettingsImpl::setHyperlinkAuditingEnabled):
+        * src/WebSettingsImpl.h:
+
 2010-09-23  Andrey Kosyakov  <caseq at chromium.org>
 
         Unreviewed build fix ("WTF/" -> "wtf/" in include, broke Arm build)
diff --git a/WebKit/chromium/public/WebSettings.h b/WebKit/chromium/public/WebSettings.h
index 0bef045..ec98600 100644
--- a/WebKit/chromium/public/WebSettings.h
+++ b/WebKit/chromium/public/WebSettings.h
@@ -93,6 +93,7 @@ public:
     virtual void setAcceleratedCompositingEnabled(bool) = 0;
     virtual void setAccelerated2dCanvasEnabled(bool) = 0;
     virtual void setMemoryInfoEnabled(bool) = 0;
+    virtual void setHyperlinkAuditingEnabled(bool) = 0;
 
 protected:
     ~WebSettings() { }
diff --git a/WebKit/chromium/src/WebSettingsImpl.cpp b/WebKit/chromium/src/WebSettingsImpl.cpp
index 329027c..8af3864 100644
--- a/WebKit/chromium/src/WebSettingsImpl.cpp
+++ b/WebKit/chromium/src/WebSettingsImpl.cpp
@@ -289,4 +289,9 @@ void WebSettingsImpl::setMemoryInfoEnabled(bool enabled)
     m_settings->setMemoryInfoEnabled(enabled);
 }
 
+void WebSettingsImpl::setHyperlinkAuditingEnabled(bool enabled)
+{
+    m_settings->setHyperlinkAuditingEnabled(enabled);
+}
+
 } // namespace WebKit
diff --git a/WebKit/chromium/src/WebSettingsImpl.h b/WebKit/chromium/src/WebSettingsImpl.h
index 0120dbc..6f204f4 100644
--- a/WebKit/chromium/src/WebSettingsImpl.h
+++ b/WebKit/chromium/src/WebSettingsImpl.h
@@ -89,6 +89,7 @@ public:
     virtual void setAcceleratedCompositingEnabled(bool);
     virtual void setAccelerated2dCanvasEnabled(bool);
     virtual void setMemoryInfoEnabled(bool);
+    virtual void setHyperlinkAuditingEnabled(bool);
 
 private:
     WebCore::Settings* m_settings;
diff --git a/WebKit/gtk/ChangeLog b/WebKit/gtk/ChangeLog
index 1ce8228..1a09dd1 100644
--- a/WebKit/gtk/ChangeLog
+++ b/WebKit/gtk/ChangeLog
@@ -1,3 +1,19 @@
+2010-09-23  Nate Chapin  <japhet at chromium.org>
+
+        Reviewed by Darin Fisher.
+
+        Add hyperlink auditing settings (i.e., <a ping>).
+        https://bugs.webkit.org/show_bug.cgi?id=30458
+
+        * webkit/webkitwebsettings.cpp:
+        (webkit_web_settings_class_init):
+        (webkit_web_settings_set_property):
+        (webkit_web_settings_get_property):
+        (webkit_web_settings_copy):
+        * webkit/webkitwebview.cpp:
+        (webkit_web_view_update_settings):
+        (webkit_web_view_settings_notify):
+
 2010-09-22  Mario Sanchez Prada  <msanchez at igalia.com>
 
         Reviewed by Martin Robinson.
diff --git a/WebKit/gtk/webkit/webkitwebsettings.cpp b/WebKit/gtk/webkit/webkitwebsettings.cpp
index 078bcc3..0b7cbd7 100644
--- a/WebKit/gtk/webkit/webkitwebsettings.cpp
+++ b/WebKit/gtk/webkit/webkitwebsettings.cpp
@@ -108,6 +108,7 @@ struct _WebKitWebSettingsPrivate {
     gboolean enable_page_cache;
     gboolean auto_resize_window;
     gboolean enable_java_applet;
+    gboolean enable_hyperlink_auditing;
 };
 
 #define WEBKIT_WEB_SETTINGS_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_SETTINGS, WebKitWebSettingsPrivate))
@@ -158,6 +159,7 @@ enum {
     PROP_ENABLE_PAGE_CACHE,
     PROP_AUTO_RESIZE_WINDOW,
     PROP_ENABLE_JAVA_APPLET
+    PROP_ENABLE_HYPERLINK_AUDITING
 };
 
 // Create a default user agent string
@@ -863,6 +865,21 @@ static void webkit_web_settings_class_init(WebKitWebSettingsClass* klass)
                                                          TRUE,
                                                          flags));
 
+    /**
+    * WebKitWebSettings:enable-hyperlink-auditing:
+    *
+    * Enable or disable support for <a ping>.
+    *
+    * Since: 1.1.22
+    */
+    g_object_class_install_property(gobject_class,
+                                    PROP_ENABLE_HYPERLINK_AUDITING,
+                                    g_param_spec_boolean("enable-hyperlink-auditing",
+                                                         _("Enable Hyperlink Auditing"),
+                                                         _("Whether <a ping> should be able to send pings"),
+                                                         FALSE,
+                                                         flags));
+
     g_type_class_add_private(klass, sizeof(WebKitWebSettingsPrivate));
 }
 
@@ -1083,6 +1100,9 @@ static void webkit_web_settings_set_property(GObject* object, guint prop_id, con
     case PROP_ENABLE_JAVA_APPLET:
         priv->enable_java_applet = g_value_get_boolean(value);
         break;
+    case PROP_ENABLE_HYPERLINK_AUDITING:
+        priv->enable_hyperlink_auditing = g_value_get_boolean(value);
+        break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
         break;
@@ -1224,6 +1244,9 @@ static void webkit_web_settings_get_property(GObject* object, guint prop_id, GVa
     case PROP_ENABLE_JAVA_APPLET:
         g_value_set_boolean(value, priv->enable_java_applet);
         break;
+    case PROP_ENABLE_HYPERLINK_AUDITING:
+        g_value_set_boolean(value, priv->enable_hyperlink_auditing);
+        break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
         break;
@@ -1297,6 +1320,7 @@ WebKitWebSettings* webkit_web_settings_copy(WebKitWebSettings* web_settings)
                  "enable-page-cache", priv->enable_page_cache,
                  "auto-resize-window", priv->auto_resize_window,
                  "enable-java-applet", priv->enable_java_applet,
+                 "enable-hyperlink-auditing", priv->enable_hyperlink_auditing,
                  NULL));
 
     return copy;
diff --git a/WebKit/gtk/webkit/webkitwebview.cpp b/WebKit/gtk/webkit/webkitwebview.cpp
index 15ef2e8..762888a 100644
--- a/WebKit/gtk/webkit/webkitwebview.cpp
+++ b/WebKit/gtk/webkit/webkitwebview.cpp
@@ -2853,7 +2853,7 @@ static void webkit_web_view_update_settings(WebKitWebView* webView)
         javaScriptCanAccessClipboard, enableOfflineWebAppCache,
         enableUniversalAccessFromFileURI, enableFileAccessFromFileURI,
         enableDOMPaste, tabKeyCyclesThroughElements,
-        enableSiteSpecificQuirks, usePageCache, enableJavaApplet;
+        enableSiteSpecificQuirks, usePageCache, enableJavaApplet, enableHyperlinkAuditing;
 
     WebKitEditingBehavior editingBehavior;
 
@@ -2890,6 +2890,7 @@ static void webkit_web_view_update_settings(WebKitWebView* webView)
                  "enable-site-specific-quirks", &enableSiteSpecificQuirks,
                  "enable-page-cache", &usePageCache,
                  "enable-java-applet", &enableJavaApplet,
+                 "enable-hyperlink-auditing", &enableHyperlinkAuditing,
                  NULL);
 
     settings->setDefaultTextEncodingName(defaultEncoding);
@@ -2925,6 +2926,7 @@ static void webkit_web_view_update_settings(WebKitWebView* webView)
     settings->setNeedsSiteSpecificQuirks(enableSiteSpecificQuirks);
     settings->setUsesPageCache(usePageCache);
     settings->setJavaEnabled(enableJavaApplet);
+    settings->setHyperlinkAuditingEnabled(enableHyperlinkAuditing);
 
     Page* page = core(webView);
     if (page)
@@ -3036,6 +3038,8 @@ static void webkit_web_view_settings_notify(WebKitWebSettings* webSettings, GPar
         settings->setUsesPageCache(g_value_get_boolean(&value));
     else if (name == g_intern_string("enable-java-applet"))
         settings->setJavaEnabled(g_value_get_boolean(&value));
+    else if (name == g_intern_string("enable-hyperlink-auditing"))
+        settings->setHyperlinkAuditingEnabled(g_value_get_boolean(&value));
     else if (!g_object_class_find_property(G_OBJECT_GET_CLASS(webSettings), name))
         g_warning("Unexpected setting '%s'", name);
     g_value_unset(&value);
diff --git a/WebKit/mac/ChangeLog b/WebKit/mac/ChangeLog
index 72a84c0..e180c94 100644
--- a/WebKit/mac/ChangeLog
+++ b/WebKit/mac/ChangeLog
@@ -1,3 +1,20 @@
+2010-09-23  Nate Chapin  <japhet at chromium.org>
+
+        Reviewed by Darin Fisher.
+
+        Add hyperlink auditing settings (i.e., <a ping>).
+        https://bugs.webkit.org/show_bug.cgi?id=30458
+
+        * WebView/WebPreferenceKeysPrivate.h:
+        * WebView/WebPreferences.mm:
+        (+[WebPreferences initialize]):
+        (-[WebPreferences setMemoryInfoEnabled:]):
+        (-[WebPreferences hyperlinkAuditingEnabled]):
+        (-[WebPreferences setHyperlinkAuditingEnabled:]):
+        * WebView/WebPreferencesPrivate.h:
+        * WebView/WebView.mm:
+        (-[WebView _preferencesChangedNotification:]):
+
 2010-09-22  Alexey Proskuryakov  <ap at apple.com>
 
         Reviewed by Anders Carlsson.
diff --git a/WebKit/mac/WebView/WebPreferenceKeysPrivate.h b/WebKit/mac/WebView/WebPreferenceKeysPrivate.h
index 17c8e4d..8119649 100644
--- a/WebKit/mac/WebView/WebPreferenceKeysPrivate.h
+++ b/WebKit/mac/WebView/WebPreferenceKeysPrivate.h
@@ -100,6 +100,7 @@
 #define WebKitDNSPrefetchingEnabledPreferenceKey @"WebKitDNSPrefetchingEnabled"
 #define WebKitFullScreenEnabledPreferenceKey @"WebKitFullScreenEnabled"
 #define WebKitMemoryInfoEnabledPreferenceKey @"WebKitMemoryInfoEnabled"
+#define WebKitHyperlinkAuditingEnabledPreferenceKey @"WebKitHyperlinkAuditingEnabled"
 
 // These are private both because callers should be using the cover methods and because the
 // cover methods themselves are private.
diff --git a/WebKit/mac/WebView/WebPreferences.mm b/WebKit/mac/WebView/WebPreferences.mm
index 87284bb..2ddd8b3 100644
--- a/WebKit/mac/WebView/WebPreferences.mm
+++ b/WebKit/mac/WebView/WebPreferences.mm
@@ -368,6 +368,7 @@ static WebCacheModel cacheModelForMainBundle(void)
         [NSNumber numberWithBool:YES],  WebKitDNSPrefetchingEnabledPreferenceKey,
         [NSNumber numberWithBool:NO],   WebKitFullScreenEnabledPreferenceKey,
         [NSNumber numberWithBool:NO],   WebKitMemoryInfoEnabledPreferenceKey,
+        [NSNumber numberWithBool:NO],   WebKitHyperlinkAuditingEnabledPreferenceKey,
         [NSNumber numberWithBool:NO],   WebKitUsePreHTML5ParserQuirksKey,
         [NSNumber numberWithLongLong:WebCore::ApplicationCacheStorage::noQuota()], WebKitApplicationCacheTotalQuota,
         [NSNumber numberWithLongLong:WebCore::ApplicationCacheStorage::noQuota()], WebKitApplicationCacheDefaultOriginQuota,
@@ -1332,6 +1333,16 @@ static NSString *classIBCreatorID = nil;
     [self _setBoolValue:flag forKey:WebKitMemoryInfoEnabledPreferenceKey];
 }
 
+- (BOOL)hyperlinkAuditingEnabled
+{
+    return [self _boolValueForKey:WebKitHyperlinkAuditingEnabledPreferenceKey];
+}
+
+- (void)setHyperlinkAuditingEnabled:(BOOL)flag
+{
+    [self _setBoolValue:flag forKey:WebKitHyperlinkAuditingEnabledPreferenceKey];
+}
+
 - (WebKitEditingBehavior)editingBehavior
 {
     return static_cast<WebKitEditingBehavior>([self _integerValueForKey:WebKitEditingBehaviorPreferenceKey]);
diff --git a/WebKit/mac/WebView/WebPreferencesPrivate.h b/WebKit/mac/WebView/WebPreferencesPrivate.h
index 3bd5e24..bb525cd 100644
--- a/WebKit/mac/WebView/WebPreferencesPrivate.h
+++ b/WebKit/mac/WebView/WebPreferencesPrivate.h
@@ -196,6 +196,9 @@ extern NSString *WebPreferencesRemovedNotification;
 - (BOOL)memoryInfoEnabled;
 - (void)setMemoryInfoEnabled:(BOOL)enabled;
 
+- (BOOL)hyperlinkAuditingEnabled;
+- (void)setHyperlinkAuditingEnabled:(BOOL)enabled;
+
 // Other private methods
 - (void)_postPreferencesChangesNotification;
 + (WebPreferences *)_getInstanceForIdentifier:(NSString *)identifier;
diff --git a/WebKit/mac/WebView/WebView.mm b/WebKit/mac/WebView/WebView.mm
index 9f3271e..9a53ad2 100644
--- a/WebKit/mac/WebView/WebView.mm
+++ b/WebKit/mac/WebView/WebView.mm
@@ -1463,6 +1463,7 @@ static bool fastDocumentTeardownEnabled()
     settings->setFullScreenEnabled([preferences fullScreenEnabled]);
 #endif
     settings->setMemoryInfoEnabled([preferences memoryInfoEnabled]);
+    settings->setHyperlinkAuditingEnabled([preferences hyperlinkAuditingEnabled]);
     settings->setUsePreHTML5ParserQuirks(shouldUsePreHTML5ParserQuirks(preferences));
 
     // Application Cache Preferences are stored on the global cache storage manager, not in Settings.
diff --git a/WebKit/qt/Api/qwebsettings.cpp b/WebKit/qt/Api/qwebsettings.cpp
index b71de25..6b36522 100644
--- a/WebKit/qt/Api/qwebsettings.cpp
+++ b/WebKit/qt/Api/qwebsettings.cpp
@@ -174,6 +174,11 @@ void QWebSettingsPrivate::apply()
 
         settings->setWebGLEnabled(value);
 #endif
+
+        value = attributes.value(QWebSettings::HyperlinkAuditingEnabled,
+                                 global->attributes.value(QWebSettings::HyperlinkAuditingEnabled));
+
+        settings->setHyperlinkAuditingEnabled(value);
  
         value = attributes.value(QWebSettings::JavascriptCanOpenWindows,
                                       global->attributes.value(QWebSettings::JavascriptCanOpenWindows));
@@ -495,6 +500,7 @@ QWebSettings::QWebSettings()
     d->attributes.insert(QWebSettings::LocalContentCanAccessFileUrls, true);
     d->attributes.insert(QWebSettings::AcceleratedCompositingEnabled, true);
     d->attributes.insert(QWebSettings::WebGLEnabled, false);
+    d->attributes.insert(QWebSettings::HyperlinkAuditingEnabled, false);
     d->attributes.insert(QWebSettings::TiledBackingStoreEnabled, false);
     d->attributes.insert(QWebSettings::FrameFlatteningEnabled, false);
     d->attributes.insert(QWebSettings::SiteSpecificQuirksEnabled, true);
diff --git a/WebKit/qt/Api/qwebsettings.h b/WebKit/qt/Api/qwebsettings.h
index 8967e7c..d5e0ef6 100644
--- a/WebKit/qt/Api/qwebsettings.h
+++ b/WebKit/qt/Api/qwebsettings.h
@@ -75,7 +75,8 @@ public:
         TiledBackingStoreEnabled,
         FrameFlatteningEnabled,
         SiteSpecificQuirksEnabled,
-        WebGLEnabled
+        WebGLEnabled,
+        HyperlinkAuditingEnabled
     };
     enum WebGraphic {
         MissingImageGraphic,
diff --git a/WebKit/qt/ChangeLog b/WebKit/qt/ChangeLog
index 06aa1e4..50da0d6 100644
--- a/WebKit/qt/ChangeLog
+++ b/WebKit/qt/ChangeLog
@@ -1,3 +1,16 @@
+2010-09-23  Nate Chapin  <japhet at chromium.org>
+
+        Reviewed by Darin Fisher.
+
+        Add hyperlink auditing settings (i.e., <a ping>).
+        https://bugs.webkit.org/show_bug.cgi?id=30458
+
+        * Api/qwebsettings.cpp:
+        (QWebSettingsPrivate::apply):
+        (QWebSettings::QWebSettings):
+        * Api/qwebsettings.h:
+
+
 2010-09-23  Tor Arne Vestbø  <tor.arne.vestbo at nokia.com>
 
         Reviewed by Simon Hausmann.
diff --git a/WebKit/win/ChangeLog b/WebKit/win/ChangeLog
index e92fc8e..406694b 100644
--- a/WebKit/win/ChangeLog
+++ b/WebKit/win/ChangeLog
@@ -1,3 +1,20 @@
+2010-09-23  Nate Chapin  <japhet at chromium.org>
+
+        Reviewed by Darin Fisher.
+
+        Add hyperlink auditing settings (i.e., <a ping>).
+        https://bugs.webkit.org/show_bug.cgi?id=30458
+
+        * Interfaces/IWebPreferences.idl:
+        * WebPreferenceKeysPrivate.h:
+        * WebPreferences.cpp:
+        (WebPreferences::initializeDefaultSettings):
+        (WebPreferences::hyperlinkAuditingEnabled):
+        (WebPreferences::setHyperlinkAuditingEnabled):
+        * WebPreferences.h:
+        * WebView.cpp:
+        (WebView::notifyPreferencesChanged):
+
 2010-09-23  Matthew Delaney  <mdelaney at apple.com>
 
         Reviewed by Adam Roben.
diff --git a/WebKit/win/Interfaces/IWebPreferences.idl b/WebKit/win/Interfaces/IWebPreferences.idl
index 4fb3de8..678557b 100644
--- a/WebKit/win/Interfaces/IWebPreferences.idl
+++ b/WebKit/win/Interfaces/IWebPreferences.idl
@@ -198,4 +198,7 @@ interface IWebPreferences : IUnknown
 
     HRESULT editingBehavior([out, retval] WebKitEditingBehavior* editingBehavior);
     HRESULT setEditingBehavior([in] WebKitEditingBehavior behavior);
+
+    HRESULT hyperlinkAuditingEnabled(BOOL *hyperlinkAuditingEnabled);
+    HRESULT setHyperlinkAuditingEnabled(BOOL hyperlinkAuditingEnabled);
 }
diff --git a/WebKit/win/WebPreferenceKeysPrivate.h b/WebKit/win/WebPreferenceKeysPrivate.h
index f62905c..0b781d8 100644
--- a/WebKit/win/WebPreferenceKeysPrivate.h
+++ b/WebKit/win/WebPreferenceKeysPrivate.h
@@ -66,6 +66,7 @@
 #define WebKitUsesPageCachePreferenceKey "WebKitUsesPageCachePreferenceKey"
 #define WebKitCacheModelPreferenceKey "WebKitCacheModelPreferenceKey"
 #define WebKitLocalStorageDatabasePathPreferenceKey "WebKitLocalStorageDatabasePath"
+#define WebKitHyperlinkAuditingEnabledPreferenceKey "WebKitHyperlinkAuditingEnabled"
 
 // These are private both because callers should be using the cover methods and because the
 // cover methods themselves are private.
diff --git a/WebKit/win/WebPreferences.cpp b/WebKit/win/WebPreferences.cpp
index 255b68e..d4bfd3e 100644
--- a/WebKit/win/WebPreferences.cpp
+++ b/WebKit/win/WebPreferences.cpp
@@ -264,6 +264,7 @@ void WebPreferences::initializeDefaultSettings()
     CFDictionaryAddValue(defaults, CFSTR(WebKitDNSPrefetchingEnabledPreferenceKey), kCFBooleanTrue);
 
     CFDictionaryAddValue(defaults, CFSTR(WebKitMemoryInfoEnabledPreferenceKey), kCFBooleanFalse);
+    CFDictionaryAddValue(defaults, CFSTR(WebKitHyperlinkAuditingEnabledPreferenceKey), kCFBooleanFalse);
 
     defaultSettings = defaults;
 }
@@ -1148,6 +1149,19 @@ HRESULT STDMETHODCALLTYPE WebPreferences::setEditingBehavior(
     return S_OK;
 }
 
+HRESULT STDMETHODCALLTYPE WebPreferences::hyperlinkAuditingEnabled(
+    /* [in] */ BOOL* enabled)
+{
+    *enabled = boolValueForKey(CFSTR(WebKitHyperlinkAuditingEnabledPreferenceKey));
+    return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebPreferences::setHyperlinkAuditingEnabled(
+    /* [retval][out] */ BOOL enabled)
+{
+    setBoolValue(CFSTR(WebKitHyperlinkAuditingEnabledPreferenceKey), enabled);
+    return S_OK;
+}
 
 HRESULT STDMETHODCALLTYPE WebPreferences::cookieStorageAcceptPolicy( 
         /* [retval][out] */ WebKitCookieStorageAcceptPolicy *acceptPolicy )
diff --git a/WebKit/win/WebPreferences.h b/WebKit/win/WebPreferences.h
index 463e1b3..d09945a 100644
--- a/WebKit/win/WebPreferences.h
+++ b/WebKit/win/WebPreferences.h
@@ -426,6 +426,9 @@ public:
     virtual HRESULT STDMETHODCALLTYPE setMemoryInfoEnabled(BOOL);
     virtual HRESULT STDMETHODCALLTYPE memoryInfoEnabled(BOOL*);
 
+    virtual HRESULT STDMETHODCALLTYPE hyperlinkAuditingEnabled(BOOL*);
+    virtual HRESULT STDMETHODCALLTYPE setHyperlinkAuditingEnabled(BOOL);
+
     // WebPreferences
 
     // This method accesses a different preference key than developerExtrasEnabled.
diff --git a/WebKit/win/WebView.cpp b/WebKit/win/WebView.cpp
index affd058..5ea707a 100755
--- a/WebKit/win/WebView.cpp
+++ b/WebKit/win/WebView.cpp
@@ -4778,6 +4778,11 @@ HRESULT WebView::notifyPreferencesChanged(IWebNotification* notification)
         return hr;
     settings->setMemoryInfoEnabled(enabled);
 
+    hr = prefsPrivate->hyperlinkAuditingEnabled(&enabled);
+    if (FAILED(hr))
+        return hr;
+    settings->setHyperlinkAuditingEnabled(enabled);
+
     if (!m_closeWindowTimer)
         m_mainFrame->invalidate(); // FIXME
 
diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index f1143b8..99fb6e5 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,3 +1,21 @@
+2010-09-23  Nate Chapin  <japhet at chromium.org>
+
+        Reviewed by Darin Fisher.
+
+        Allow DRT to toggle hyperlink auditing (i.e., <a ping>).
+        https://bugs.webkit.org/show_bug.cgi?id=30458
+
+        * DumpRenderTree/chromium/LayoutTestController.cpp:
+        (LayoutTestController::overridePreference):
+        * DumpRenderTree/chromium/WebPreferences.cpp:
+        (WebPreferences::reset):
+        (WebPreferences::applyTo):
+        * DumpRenderTree/chromium/WebPreferences.h:
+        * DumpRenderTree/gtk/DumpRenderTree.cpp:
+        (resetDefaultsToConsistentValues):
+        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
+        (LayoutTestController::overridePreference):
+
 2010-09-21  Stephen White  <senorblanco at chromium.org>
 
         Reviewed by David Levin.
diff --git a/WebKitTools/DumpRenderTree/chromium/LayoutTestController.cpp b/WebKitTools/DumpRenderTree/chromium/LayoutTestController.cpp
index b1c0bcd..2b3f0ba 100644
--- a/WebKitTools/DumpRenderTree/chromium/LayoutTestController.cpp
+++ b/WebKitTools/DumpRenderTree/chromium/LayoutTestController.cpp
@@ -1251,6 +1251,8 @@ void LayoutTestController::overridePreference(const CppArgumentList& arguments,
         prefs->tabsToLinks = cppVariantToBool(value);
     else if (key == "WebKitWebGLEnabled")
         prefs->experimentalWebGLEnabled = cppVariantToBool(value);
+    else if (key == "WebKitHyperlinkAuditingEnabled")
+        prefs->hyperlinkAuditingEnabled = cppVariantToBool(value);
     else {
         string message("Invalid name for preference: ");
         message.append(key);
diff --git a/WebKitTools/DumpRenderTree/chromium/WebPreferences.cpp b/WebKitTools/DumpRenderTree/chromium/WebPreferences.cpp
index 8d2db1f..5e4a97e 100644
--- a/WebKitTools/DumpRenderTree/chromium/WebPreferences.cpp
+++ b/WebKitTools/DumpRenderTree/chromium/WebPreferences.cpp
@@ -100,6 +100,7 @@ void WebPreferences::reset()
 #endif
 
     tabsToLinks = false;
+    hyperlinkAuditingEnabled = false;
     accelerated2dCanvasEnabled = false;
 }
 
@@ -140,6 +141,7 @@ void WebPreferences::applyTo(WebView* webView)
     settings->setWebSecurityEnabled(webSecurityEnabled);
     settings->setAllowUniversalAccessFromFileURLs(allowUniversalAccessFromFileURLs);
     settings->setEditingBehavior(editingBehavior);
+    settings->setHyperlinkAuditingEnabled(hyperlinkAuditingEnabled);
     // LayoutTests were written with Safari Mac in mind which does not allow
     // tabbing to links by default.
     webView->setTabsToLinks(tabsToLinks);
diff --git a/WebKitTools/DumpRenderTree/chromium/WebPreferences.h b/WebKitTools/DumpRenderTree/chromium/WebPreferences.h
index fc3c114..c496b12 100644
--- a/WebKitTools/DumpRenderTree/chromium/WebPreferences.h
+++ b/WebKitTools/DumpRenderTree/chromium/WebPreferences.h
@@ -75,6 +75,7 @@ struct WebPreferences {
     bool allowUniversalAccessFromFileURLs;
     WebKit::WebSettings::EditingBehavior editingBehavior;
     bool tabsToLinks;
+    bool hyperlinkAuditingEnabled;
     bool accelerated2dCanvasEnabled;
 
     WebPreferences() { reset(); }
diff --git a/WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp b/WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp
index af2e403..d6b9c34 100644
--- a/WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp
+++ b/WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp
@@ -336,6 +336,7 @@ static void resetDefaultsToConsistentValues()
                  "auto-resize-window", TRUE,
                  "enable-java-applet", FALSE,
                  "enable-plugins", TRUE,
+                 "enable-hyperlink-auditing", FALSE,
                  "editing-behavior", WEBKIT_EDITING_BEHAVIOR_MAC,
                  NULL);
 
diff --git a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
index b2ef716..90a04c4 100644
--- a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
+++ b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
@@ -591,6 +591,8 @@ void LayoutTestController::overridePreference(const QString& name, const QVarian
         settings->setAttribute(QWebSettings::PluginsEnabled, value.toBool());
     else if (name == "WebKitWebGLEnabled")
         settings->setAttribute(QWebSettings::WebGLEnabled, value.toBool());
+    else if (name == "WebKitHyperlinkAuditingEnabled")
+        settings->setAttribute(QWebSettings::HyperlinkAuditingEnabled, value.toBool());
     else
         printf("ERROR: LayoutTestController::overridePreference() does not support the '%s' preference\n",
             name.toLatin1().data());

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list