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

andersca at apple.com andersca at apple.com
Wed Dec 22 11:45:37 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 741ac2206d683c3fe6fa30553434452d24e095bb
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Aug 6 00:00:45 2010 +0000

    Use the visited link provider for visited links
    https://bugs.webkit.org/show_bug.cgi?id=43583
    
    Reviewed by Sam Weinig.
    
    WebCore:
    
    Export Page::visitedStateChanged and Page::allvisitedStateChanged.
    
    * WebCore.exp.in:
    
    WebKit2:
    
    * Shared/CoreIPCSupport/WebProcessMessageKinds.h:
    (WebProcessMessage::):
    Remove AddVisitedLink.
    
    * Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h:
    (WebProcessProxyMessage::):
    Remove PopulateVisitedLinks and add AddVisitedLink.
    
    * UIProcess/WebContext.cpp:
    (WebKit::WebContext::sharedProcessContext):
    Initialize the main run loop before creating the context.
    
    (WebKit::WebContext::sharedThreadContext):
    Ditto.
    
    (WebKit::WebContext::create):
    Ditto.
    
    (WebKit::WebContext::WebContext):
    Initialize the visited link provider.
    
    (WebKit::WebContext::processDidFinishLaunching):
    Ask the visited link provider to populate visited links.
    
    (WebKit::WebContext::addVisitedLink):
    Ask the visited link provider to add the visited link.
    
    * UIProcess/WebProcessProxy.cpp:
    (WebKit::WebProcessProxy::addVisitedLink):
    Call WebContext::addVisitedLink.
    
    (WebKit::WebProcessProxy::didReceiveMessage):
    Handle AddVisitedLink.
    
    (WebKit::WebProcessProxy::didFinishLaunching):
    Call WebContext::processdidFinishLaunching.
    
    * UIProcess/WebProcessProxy.h:
    * WebProcess/WebCoreSupport/WebChromeClient.cpp:
    (WebKit::WebChromeClient::populateVisitedLinks):
    Don't send the WebProcessProxyMessage::PopulateVisitedLinks message.
    
    * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
    (WebKit::WebPlatformStrategies::isLinkVisited):
    Call WebProcess::isLinkVisited.
    
    (WebKit::WebPlatformStrategies::addVisitedLink):
    Call WebProcess::addVisitedLink.
    
    * WebProcess/WebProcess.cpp:
    (WebKit::WebProcess::setVisitedLinkTable):
    Create a shared memory object and tell the visited link table about it.
    
    (WebKit::WebProcess::visitedLinkStateChanged):
    Go through the link hashes and call Page::visitedStateChanged.
    
    (WebKit::WebProcess::allVisitedLinkStateChanged):
    Call Page::allVisitedStateChanged.
    
    (WebKit::WebProcess::isLinkVisited):
    Call VisitedLinkTable::isLinkVisited.
    
    (WebKit::WebProcess::addVisitedLink):
    Inform the UI process about the added link.
    
    (WebKit::WebProcess::didReceiveMessage):
    Handle new messages.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@64797 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 19a7356..0d99357 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,14 @@
+2010-08-05  Anders Carlsson  <andersca at apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Use the visited link provider for visited links
+        https://bugs.webkit.org/show_bug.cgi?id=43583
+
+        Export Page::visitedStateChanged and Page::allvisitedStateChanged.
+
+        * WebCore.exp.in:
+
 2010-08-05  Eric Seidel  <eric at webkit.org>
 
         Reviewed by Nikolas Zimmermann.
diff --git a/WebCore/WebCore.exp.in b/WebCore/WebCore.exp.in
index c07a5b8..828510a 100644
--- a/WebCore/WebCore.exp.in
+++ b/WebCore/WebCore.exp.in
@@ -558,6 +558,8 @@ __ZN7WebCore4Page16setCanStartMediaEb
 __ZN7WebCore4Page16setDefersLoadingEb
 __ZN7WebCore4Page17willMoveOffscreenEv
 __ZN7WebCore4Page18removeSchedulePairEN3WTF10PassRefPtrINS_12SchedulePairEEE
+__ZN7WebCore4Page19visitedStateChangedEPNS_9PageGroupEy
+__ZN7WebCore4Page22allVisitedStateChangedEPNS_9PageGroupE
 __ZN7WebCore4Page23clearUndoRedoOperationsEv
 __ZN7WebCore4Page27setJavaScriptURLsAreAllowedEb
 __ZN7WebCore4Page31setCustomHTMLTokenizerChunkSizeEi
diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index 3d5ba82..b79d260 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,3 +1,78 @@
+2010-08-05  Anders Carlsson  <andersca at apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Use the visited link provider for visited links
+        https://bugs.webkit.org/show_bug.cgi?id=43583
+
+        * Shared/CoreIPCSupport/WebProcessMessageKinds.h:
+        (WebProcessMessage::):
+        Remove AddVisitedLink.
+
+        * Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h:
+        (WebProcessProxyMessage::):
+        Remove PopulateVisitedLinks and add AddVisitedLink.
+
+        * UIProcess/WebContext.cpp:
+        (WebKit::WebContext::sharedProcessContext):
+        Initialize the main run loop before creating the context.
+        
+        (WebKit::WebContext::sharedThreadContext):
+        Ditto.
+        
+        (WebKit::WebContext::create):
+        Ditto.
+
+        (WebKit::WebContext::WebContext):
+        Initialize the visited link provider.
+
+        (WebKit::WebContext::processDidFinishLaunching):
+        Ask the visited link provider to populate visited links.
+
+        (WebKit::WebContext::addVisitedLink):
+        Ask the visited link provider to add the visited link.
+
+        * UIProcess/WebProcessProxy.cpp:
+        (WebKit::WebProcessProxy::addVisitedLink):
+        Call WebContext::addVisitedLink.
+
+        (WebKit::WebProcessProxy::didReceiveMessage):
+        Handle AddVisitedLink.
+
+        (WebKit::WebProcessProxy::didFinishLaunching):
+        Call WebContext::processdidFinishLaunching.
+
+        * UIProcess/WebProcessProxy.h:
+        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+        (WebKit::WebChromeClient::populateVisitedLinks):
+        Don't send the WebProcessProxyMessage::PopulateVisitedLinks message.
+
+        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
+        (WebKit::WebPlatformStrategies::isLinkVisited):
+        Call WebProcess::isLinkVisited.
+        
+        (WebKit::WebPlatformStrategies::addVisitedLink):
+        Call WebProcess::addVisitedLink.
+
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::setVisitedLinkTable):
+        Create a shared memory object and tell the visited link table about it.
+
+        (WebKit::WebProcess::visitedLinkStateChanged):
+        Go through the link hashes and call Page::visitedStateChanged.
+
+        (WebKit::WebProcess::allVisitedLinkStateChanged):
+        Call Page::allVisitedStateChanged.
+
+        (WebKit::WebProcess::isLinkVisited):
+        Call VisitedLinkTable::isLinkVisited.
+
+        (WebKit::WebProcess::addVisitedLink):
+        Inform the UI process about the added link.
+
+        (WebKit::WebProcess::didReceiveMessage):
+        Handle new messages.
+
 2010-08-05  Steve Falkenburg  <sfalken at apple.com>
 
         Windows build fix.
diff --git a/WebKit2/Shared/CoreIPCSupport/WebProcessMessageKinds.h b/WebKit2/Shared/CoreIPCSupport/WebProcessMessageKinds.h
index c5a725c..4919c72 100644
--- a/WebKit2/Shared/CoreIPCSupport/WebProcessMessageKinds.h
+++ b/WebKit2/Shared/CoreIPCSupport/WebProcessMessageKinds.h
@@ -37,8 +37,6 @@ enum Kind {
     VisitedLinkStateChanged,
     AllVisitedLinkStateChanged,
     
-    // FIXME: Remove AddVisitedLink.
-    AddVisitedLink,
     LoadInjectedBundle,
     SetApplicationCacheDirectory,
     SetShouldTrackVisitedLinks,
diff --git a/WebKit2/Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h b/WebKit2/Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h
index ddf9fde..f6863d7 100644
--- a/WebKit2/Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h
+++ b/WebKit2/Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h
@@ -34,13 +34,13 @@ namespace WebProcessProxyMessage {
 
 enum Kind {
     AddBackForwardItem,
+    AddVisitedLink,
     DidNavigateWithNavigationData,
     DidPerformClientRedirect,
     DidPerformServerRedirect,
     DidUpdateHistoryTitle,
     GetPluginHostConnection,
-    GetPlugins,
-    PopulateVisitedLinks,
+    GetPlugins
 };
 
 }
diff --git a/WebKit2/UIProcess/WebContext.cpp b/WebKit2/UIProcess/WebContext.cpp
index fb23068..46b1eb9 100644
--- a/WebKit2/UIProcess/WebContext.cpp
+++ b/WebKit2/UIProcess/WebContext.cpp
@@ -174,19 +174,28 @@ static WTF::RefCountedLeakCounter webContextCounter("WebContext");
 
 WebContext* WebContext::sharedProcessContext()
 {
+    RunLoop::initializeMainRunLoop();
     static WebContext* context = adoptRef(new WebContext(ProcessModelSharedSecondaryProcess, String())).leakRef();
     return context;
 }
 
 WebContext* WebContext::sharedThreadContext()
 {
+    RunLoop::initializeMainRunLoop();
     static WebContext* context = adoptRef(new WebContext(ProcessModelSharedSecondaryThread, String())).leakRef();
     return context;
 }
 
+PassRefPtr<WebContext> WebContext::create(const String& injectedBundlePath)
+{
+    RunLoop::initializeMainRunLoop();
+    return adoptRef(new WebContext(ProcessModelSecondaryProcess, injectedBundlePath));
+}
+    
 WebContext::WebContext(ProcessModel processModel, const WebCore::String& injectedBundlePath)
     : m_processModel(processModel)
     , m_injectedBundlePath(injectedBundlePath)
+    , m_visitedLinkProvider(this)
 {
     RunLoop::initializeMainRunLoop();
 
@@ -236,6 +245,14 @@ void WebContext::ensureWebProcess()
         m_process->send(WebProcessMessage::RegisterURLSchemeAsEmptyDocument, 0, CoreIPC::In(*it));
 }
 
+void WebContext::processDidFinishLaunching(WebProcessProxy* process)
+{
+    // FIXME: Once we support multiple processes per context, this assertion won't hold.
+    ASSERT(process == m_process);
+
+    m_visitedLinkProvider.populateVisitedLinksIfNeeded();
+}
+
 WebPageProxy* WebContext::createWebPage(WebPageNamespace* pageNamespace)
 {
     ensureWebProcess();
@@ -371,10 +388,15 @@ void WebContext::addVisitedLink(const String& visitedURL)
     if (visitedURL.isEmpty())
         return;
 
-    WebCore::LinkHash hash = visitedLinkHash(visitedURL.characters(), visitedURL.length());
-    m_process->send(WebProcessMessage::AddVisitedLink, 0, CoreIPC::In(hash));
+    LinkHash linkHash = visitedLinkHash(visitedURL.characters(), visitedURL.length());
+    addVisitedLink(linkHash);
 }
 
+void WebContext::addVisitedLink(LinkHash linkHash)
+{
+    m_visitedLinkProvider.addVisitedLink(linkHash);
+}
+        
 void WebContext::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder& arguments)
 {
     switch (messageID.get<WebContextMessage::Kind>()) {
diff --git a/WebKit2/UIProcess/WebContext.h b/WebKit2/UIProcess/WebContext.h
index 0f87667..a6abe22 100644
--- a/WebKit2/UIProcess/WebContext.h
+++ b/WebKit2/UIProcess/WebContext.h
@@ -29,9 +29,11 @@
 #include "APIObject.h"
 #include "PluginInfoStore.h"
 #include "ProcessModel.h"
+#include "VisitedLinkProvider.h"
 #include "WebContextInjectedBundleClient.h"
 #include "WebHistoryClient.h"
 #include "WebProcessProxy.h"
+#include <WebCore/LinkHash.h>
 #include <WebCore/PlatformString.h>
 #include <WebCore/StringHash.h>
 #include <wtf/Forward.h>
@@ -54,10 +56,7 @@ public:
     static WebContext* sharedProcessContext();
     static WebContext* sharedThreadContext();
 
-    static PassRefPtr<WebContext> create(const WebCore::String& injectedBundlePath)
-    {
-        return adoptRef(new WebContext(ProcessModelSecondaryProcess, injectedBundlePath));
-    }
+    static PassRefPtr<WebContext> create(const WebCore::String& injectedBundlePath);
 
     ~WebContext();
 
@@ -67,6 +66,8 @@ public:
     ProcessModel processModel() const { return m_processModel; }
     WebProcessProxy* process() const { return m_process.get(); }
 
+    void processDidFinishLaunching(WebProcessProxy*);
+
     WebPageProxy* createWebPage(WebPageNamespace*);
 
     void reviveIfNecessary();
@@ -101,6 +102,7 @@ public:
     void registerURLSchemeAsEmptyDocument(const WebCore::String&);
     
     void addVisitedLink(const WebCore::String&);
+    void addVisitedLink(WebCore::LinkHash);
 
     void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder&);
 
@@ -126,7 +128,8 @@ private:
     WebHistoryClient m_historyClient;
 
     PluginInfoStore m_pluginInfoStore;
-    
+    VisitedLinkProvider m_visitedLinkProvider;
+        
     HashSet<WebCore::String> m_schemesToRegisterAsEmptyDocument;
 };
 
diff --git a/WebKit2/UIProcess/WebProcessProxy.cpp b/WebKit2/UIProcess/WebProcessProxy.cpp
index 63b534c..0c1fa30 100644
--- a/WebKit2/UIProcess/WebProcessProxy.cpp
+++ b/WebKit2/UIProcess/WebProcessProxy.cpp
@@ -216,6 +216,11 @@ void WebProcessProxy::addOrUpdateBackForwardListItem(uint64_t itemID, const Stri
     result.first->second->setTitle(title);
 }
 
+void WebProcessProxy::addVisitedLink(LinkHash linkHash)
+{
+    m_context->addVisitedLink(linkHash);
+}
+
 void WebProcessProxy::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
 {
     if (messageID.is<CoreIPC::MessageClassWebProcessProxy>()) {
@@ -231,6 +236,16 @@ void WebProcessProxy::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC
                 return;
             }
 
+            case WebProcessProxyMessage::AddVisitedLink: {
+                LinkHash linkHash;
+
+                if (!arguments->decode(CoreIPC::Out(linkHash)))
+                    return;
+
+                addVisitedLink(linkHash);
+                return;
+            }
+
             case WebProcessProxyMessage::DidNavigateWithNavigationData: {
                 uint64_t pageID;
                 WebNavigationDataStore store;
@@ -290,10 +305,6 @@ void WebProcessProxy::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC
                 m_context->didUpdateHistoryTitle(page->webFrame(frameID), title, url);
                 break;
             }
-            case WebProcessProxyMessage::PopulateVisitedLinks: {
-                m_context->populateVisitedLinks();
-                break;
-            }
 
             // These are synchronous messages and should never be handled here.
             case WebProcessProxyMessage::GetPlugins:
@@ -354,8 +365,8 @@ void WebProcessProxy::didReceiveSyncMessage(CoreIPC::Connection* connection, Cor
             case WebProcessProxyMessage::DidPerformClientRedirect:
             case WebProcessProxyMessage::DidPerformServerRedirect:
             case WebProcessProxyMessage::DidUpdateHistoryTitle:
-            case WebProcessProxyMessage::PopulateVisitedLinks:
             case WebProcessProxyMessage::AddBackForwardItem:
+            case WebProcessProxyMessage::AddVisitedLink:
                 ASSERT_NOT_REACHED();
                 break;
         }
@@ -415,7 +426,10 @@ void WebProcessProxy::didFinishLaunching(ProcessLauncher*, const CoreIPC::Connec
         m_connection->sendMessage(outgoingMessage.messageID(), adoptPtr(outgoingMessage.arguments()));
     }
 
-    m_pendingMessages.clear();    
+    m_pendingMessages.clear();
+
+    // Tell the context that we finished launching.
+    m_context->processDidFinishLaunching(this);
 }
 
 } // namespace WebKit
diff --git a/WebKit2/UIProcess/WebProcessProxy.h b/WebKit2/UIProcess/WebProcessProxy.h
index 60bf9f8..6808b6f 100644
--- a/WebKit2/UIProcess/WebProcessProxy.h
+++ b/WebKit2/UIProcess/WebProcessProxy.h
@@ -33,6 +33,7 @@
 #include "ProcessModel.h"
 #include "ResponsivenessTimer.h"
 #include "WebPageProxy.h"
+#include <WebCore/LinkHash.h>
 #include <wtf/HashMap.h>
 #include <wtf/PassRefPtr.h>
 #include <wtf/RefCounted.h>
@@ -100,6 +101,7 @@ private:
     void getPluginHostConnection(const WebCore::String& mimeType, const WebCore::KURL& url, WebCore::String& pluginPath);
 
     void addOrUpdateBackForwardListItem(uint64_t itemID, const WebCore::String& originalURLString, const WebCore::String& urlString, const WebCore::String& title);
+    void addVisitedLink(WebCore::LinkHash);
 
     // CoreIPC::Connection::Client
     void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
diff --git a/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp b/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp
index b053b52..53b47c9 100644
--- a/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp
+++ b/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp
@@ -410,7 +410,6 @@ void WebChromeClient::dashboardRegionsChanged()
 
 void WebChromeClient::populateVisitedLinks()
 {
-    WebProcess::shared().connection()->send(WebProcessProxyMessage::PopulateVisitedLinks, 0, CoreIPC::In());
 }
 
 FloatRect WebChromeClient::customHighlightRect(Node*, const AtomicString& type, const FloatRect& lineRect)
diff --git a/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp b/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp
index 9494875..a1986af 100644
--- a/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp
+++ b/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp
@@ -812,16 +812,14 @@ String WebPlatformStrategies::validationMessageStepMismatchText()
 }
 
 // VisitedLinkStrategy
-bool WebPlatformStrategies::isLinkVisited(Page* page, LinkHash hash)
+bool WebPlatformStrategies::isLinkVisited(Page* page, LinkHash linkHash)
 {
-    // FIXME: Have WebKit2 manage its own visited links
-    return page->group().isLinkVisited(hash);
+    return WebProcess::shared().isLinkVisited(linkHash);
 }
 
-void WebPlatformStrategies::addVisitedLink(Page* page, LinkHash hash)
+void WebPlatformStrategies::addVisitedLink(Page* page, LinkHash linkHash)
 {
-    // FIXME: Have WebKit2 manage its own visited links
-    return page->group().addVisitedLinkHash(hash);
+    WebProcess::shared().addVisitedLink(linkHash);
 }
 
 } // namespace WebKit
diff --git a/WebKit2/WebProcess/WebProcess.cpp b/WebKit2/WebProcess/WebProcess.cpp
index 841f988..dd9f633 100644
--- a/WebKit2/WebProcess/WebProcess.cpp
+++ b/WebKit2/WebProcess/WebProcess.cpp
@@ -33,8 +33,10 @@
 #include "WebPage.h"
 #include "WebPlatformStrategies.h"
 #include "WebPreferencesStore.h"
+#include "WebProcessProxyMessageKinds.h"
 #include "WebProcessMessageKinds.h"
 #include <WebCore/ApplicationCacheStorage.h>
+#include <WebCore/Page.h>
 #include <WebCore/PageGroup.h>
 #include <WebCore/SchemeRegistry.h>
 #include <wtf/PassRefPtr.h>
@@ -110,15 +112,42 @@ void WebProcess::registerURLSchemeAsEmptyDocument(const WebCore::String& urlSche
     SchemeRegistry::registerURLSchemeAsEmptyDocument(urlScheme);
 }
 
-void WebProcess::addVisitedLinkHash(WebCore::LinkHash hash)
+void WebProcess::setVisitedLinkTable(const SharedMemory::Handle& handle)
 {
-    PageGroup* group = PageGroup::pageGroup("WebKit2Group");
-    ASSERT(group);
-    if (!group) {
-        printf("Cannot find PageGroup named 'WebKit2Group'\n");
+    RefPtr<SharedMemory> sharedMemory = SharedMemory::create(handle, SharedMemory::ReadOnly);
+    if (!sharedMemory)
         return;
-    }
-    group->addVisitedLinkHash(hash);
+
+    m_visitedLinkTable.setSharedMemory(sharedMemory.release());
+}
+
+static PageGroup* webKit2PageGroup()
+{
+    return PageGroup::pageGroup("WebKit2Group");
+}
+
+void WebProcess::visitedLinkStateChanged(const Vector<WebCore::LinkHash>& linkHashes)
+{
+    for (size_t i = 0; i < linkHashes.size(); ++i)
+        Page::visitedStateChanged(webKit2PageGroup(), linkHashes[i]);
+}
+
+void WebProcess::allVisitedLinkStateChanged()
+{
+    Page::allVisitedStateChanged(webKit2PageGroup());
+}
+
+bool WebProcess::isLinkVisited(LinkHash linkHash) const
+{
+    return m_visitedLinkTable.isLinkVisited(linkHash);
+}
+
+void WebProcess::addVisitedLink(WebCore::LinkHash linkHash)
+{
+    if (isLinkVisited(linkHash))
+        return;
+
+    m_connection->send(WebProcessProxyMessage::AddVisitedLink, 0, CoreIPC::In(linkHash));
 }
 
 WebPage* WebProcess::webPage(uint64_t pageID) const
@@ -177,20 +206,24 @@ void WebProcess::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::Mes
 {
     if (messageID.is<CoreIPC::MessageClassWebProcess>()) {
         switch (messageID.get<WebProcessMessage::Kind>()) {
-            case WebProcessMessage::SetVisitedLinkTable:
-            case WebProcessMessage::VisitedLinkStateChanged:
-            case WebProcessMessage::AllVisitedLinkStateChanged:
-                // FIXME: Implement.
-                return;
-            
-            case WebProcessMessage::AddVisitedLink: {
-                WebCore::LinkHash hash;
-                if (!arguments->decode(CoreIPC::Out(hash)))
+            case WebProcessMessage::SetVisitedLinkTable: {
+                SharedMemory::Handle handle;
+                if (!arguments->decode(CoreIPC::Out(handle)))
                     return;
-
-                addVisitedLinkHash(hash);
+                
+                setVisitedLinkTable(handle);
                 return;
             }
+            case WebProcessMessage::VisitedLinkStateChanged: {
+                Vector<LinkHash> linkHashes;
+                if (!arguments->decode(CoreIPC::Out(linkHashes)))
+                    return;
+                visitedLinkStateChanged(linkHashes);
+            }
+            case WebProcessMessage::AllVisitedLinkStateChanged:
+                allVisitedLinkStateChanged();
+                return;
+            
             case WebProcessMessage::LoadInjectedBundle: {
                 String path;
 
diff --git a/WebKit2/WebProcess/WebProcess.h b/WebKit2/WebProcess/WebProcess.h
index 73bd29b..dfcb2ef 100644
--- a/WebKit2/WebProcess/WebProcess.h
+++ b/WebKit2/WebProcess/WebProcess.h
@@ -28,6 +28,8 @@
 
 #include "Connection.h"
 #include "DrawingArea.h"
+#include "SharedMemory.h"
+#include "VisitedLinkTable.h"
 #include <WebCore/LinkHash.h>
 #include <wtf/HashMap.h>
 
@@ -63,6 +65,9 @@ public:
     mach_port_t compositingRenderServerPort() const { return m_compositingRenderServerPort; }
 #endif
     
+    void addVisitedLink(WebCore::LinkHash);
+    bool isLinkVisited(WebCore::LinkHash) const;
+
 private:
     WebProcess();
     void shutdown();
@@ -74,8 +79,11 @@ private:
 #endif
     void setApplicationCacheDirectory(const WebCore::String&);
     void registerURLSchemeAsEmptyDocument(const WebCore::String&);
-    void addVisitedLinkHash(WebCore::LinkHash);
 
+    void setVisitedLinkTable(const SharedMemory::Handle&);
+    void visitedLinkStateChanged(const Vector<WebCore::LinkHash>& linkHashes);
+    void allVisitedLinkStateChanged();
+    
     // CoreIPC::Connection::Client
     void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
     void didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, CoreIPC::ArgumentEncoder*);
@@ -89,6 +97,9 @@ private:
 
     RunLoop* m_runLoop;
 
+    // FIXME: The visited link table should not be per process.
+    VisitedLinkTable m_visitedLinkTable;
+
 #if USE(ACCELERATED_COMPOSITING) && PLATFORM(MAC)
     mach_port_t m_compositingRenderServerPort;
 #endif

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list