Diff
Modified: trunk/Source/WebKit2/ChangeLog (168117 => 168118)
--- trunk/Source/WebKit2/ChangeLog 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/ChangeLog 2014-05-01 20:39:55 UTC (rev 168118)
@@ -1,3 +1,51 @@
+2014-05-01 Anders Carlsson <ander...@apple.com>
+
+ WKWebView doesn't track visited links (for visited link coloring)
+ https://bugs.webkit.org/show_bug.cgi?id=132438
+ <rdar://problem/16704519>
+
+ Reviewed by Dan Bernstein.
+
+ * Shared/WebProcessCreationParameters.cpp:
+ (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
+ (WebKit::WebProcessCreationParameters::encode):
+ (WebKit::WebProcessCreationParameters::decode):
+ * Shared/WebProcessCreationParameters.h:
+ * UIProcess/API/APIHistoryClient.h:
+ (API::HistoryClient::addsVisitedLinks):
+ (API::HistoryClient::shouldTrackVisitedLinks): Deleted.
+ * UIProcess/API/C/WKContext.cpp:
+ (WKContextSetHistoryClient):
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView _addsVisitedLinks]):
+ (-[WKWebView _setAddsVisitedLinks:]):
+ * UIProcess/API/Cocoa/WKWebViewPrivate.h:
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView initWithFrame:context:configuration:webView:]):
+ * UIProcess/Cocoa/HistoryClient.h:
+ * UIProcess/Cocoa/HistoryClient.mm:
+ (WebKit::HistoryClient::shouldTrackVisitedLinks): Deleted.
+ * UIProcess/VisitedLinkProvider.cpp:
+ (WebKit::VisitedLinkProvider::addVisitedLinkHashFromPage):
+ * UIProcess/VisitedLinkProvider.h:
+ * UIProcess/VisitedLinkProvider.messages.in:
+ * UIProcess/WebContext.cpp:
+ (WebKit::WebContext::setHistoryClient):
+ (WebKit::WebContext::createNewWebProcess):
+ * UIProcess/WebContext.h:
+ (WebKit::WebContext::processes):
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::WebPageProxy):
+ * UIProcess/WebPageProxy.h:
+ (WebKit::WebPageProxy::addsVisitedLinks):
+ (WebKit::WebPageProxy::setAddsVisitedLinks):
+ * WebProcess/WebPage/VisitedLinkTableController.cpp:
+ (WebKit::VisitedLinkTableController::addVisitedLink):
+ * WebProcess/WebProcess.cpp:
+ (WebKit::WebProcess::initializeWebProcess):
+ * WebProcess/WebProcess.h:
+ * WebProcess/WebProcess.messages.in:
+
2014-05-01 Benjamin Poulain <bpoul...@apple.com>
[iOS][WK2] The highlight view needs to be in WKWebView coordinates
Modified: trunk/Source/WebKit2/Shared/WebProcessCreationParameters.cpp (168117 => 168118)
--- trunk/Source/WebKit2/Shared/WebProcessCreationParameters.cpp 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/Shared/WebProcessCreationParameters.cpp 2014-05-01 20:39:55 UTC (rev 168118)
@@ -32,8 +32,7 @@
namespace WebKit {
WebProcessCreationParameters::WebProcessCreationParameters()
- : shouldTrackVisitedLinks(false)
- , shouldAlwaysUseComplexTextCodePath(false)
+ : shouldAlwaysUseComplexTextCodePath(false)
, shouldUseFontSmoothing(true)
, defaultRequestTimeoutInterval(INT_MAX)
#if PLATFORM(COCOA)
@@ -93,7 +92,6 @@
encoder << ignoreTLSErrors;
#endif
encoder.encodeEnum(cacheModel);
- encoder << shouldTrackVisitedLinks;
encoder << shouldAlwaysUseComplexTextCodePath;
encoder << shouldUseFontSmoothing;
encoder << iconDatabaseEnabled;
@@ -206,8 +204,6 @@
#endif
if (!decoder.decodeEnum(parameters.cacheModel))
return false;
- if (!decoder.decode(parameters.shouldTrackVisitedLinks))
- return false;
if (!decoder.decode(parameters.shouldAlwaysUseComplexTextCodePath))
return false;
if (!decoder.decode(parameters.shouldUseFontSmoothing))
Modified: trunk/Source/WebKit2/Shared/WebProcessCreationParameters.h (168117 => 168118)
--- trunk/Source/WebKit2/Shared/WebProcessCreationParameters.h 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/Shared/WebProcessCreationParameters.h 2014-05-01 20:39:55 UTC (rev 168118)
@@ -100,7 +100,6 @@
#endif
CacheModel cacheModel;
- bool shouldTrackVisitedLinks;
bool shouldAlwaysUseComplexTextCodePath;
bool shouldUseFontSmoothing;
Modified: trunk/Source/WebKit2/UIProcess/API/APIHistoryClient.h (168117 => 168118)
--- trunk/Source/WebKit2/UIProcess/API/APIHistoryClient.h 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/UIProcess/API/APIHistoryClient.h 2014-05-01 20:39:55 UTC (rev 168118)
@@ -46,7 +46,10 @@
virtual void didPerformServerRedirect(WebKit::WebContext*, WebKit::WebPageProxy*, const WTF::String&, const WTF::String&, WebKit::WebFrameProxy*) { }
virtual void didUpdateHistoryTitle(WebKit::WebContext*, WebKit::WebPageProxy*, const WTF::String&, const WTF::String&, WebKit::WebFrameProxy*) { }
virtual void populateVisitedLinks(WebKit::WebContext*) { }
- virtual bool shouldTrackVisitedLinks() const { return false; }
+
+ // FIXME: This is only used by the legacy SPI. We should add an API::Context object that
+ // can hold these things so we won't have to get it through API::HistoryClient.
+ virtual bool addsVisitedLinks() const { return false; }
};
} // namespace API
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKContext.cpp (168117 => 168118)
--- trunk/Source/WebKit2/UIProcess/API/C/WKContext.cpp 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKContext.cpp 2014-05-01 20:39:55 UTC (rev 168118)
@@ -146,13 +146,21 @@
m_client.populateVisitedLinks(toAPI(context), m_client.base.clientInfo);
}
- virtual bool shouldTrackVisitedLinks() const
+ virtual bool addsVisitedLinks() const override
{
return m_client.populateVisitedLinks;
}
};
-
- toImpl(contextRef)->setHistoryClient(std::make_unique<HistoryClient>(wkClient));
+
+ WebKit::WebContext& context = *toImpl(contextRef);
+ context.setHistoryClient(std::make_unique<HistoryClient>(wkClient));
+
+ bool addsVisitedLinks = context.historyClient().addsVisitedLinks();
+
+ for (auto& process : context.processes()) {
+ for (auto& page : process->pages())
+ page->setAddsVisitedLinks(addsVisitedLinks);
+ }
}
void WKContextSetDownloadClient(WKContextRef contextRef, const WKContextDownloadClientBase* wkClient)
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (168117 => 168118)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2014-05-01 20:39:55 UTC (rev 168118)
@@ -93,7 +93,6 @@
_WKRenderingProgressEvents _observedRenderingProgressEvents;
WebKit::WeakObjCPtr<id <_WKFormDelegate>> _formDelegate;
-
#if PLATFORM(IOS)
RetainPtr<WKScrollView> _scrollView;
RetainPtr<WKContentView> _contentView;
@@ -1006,6 +1005,16 @@
#endif
}
+- (BOOL)_addsVisitedLinks
+{
+ return _page->addsVisitedLinks();
+}
+
+- (void)_setAddsVisitedLinks:(BOOL)addsVisitedLinks
+{
+ _page->setAddsVisitedLinks(addsVisitedLinks);
+}
+
static inline WebCore::LayoutMilestones layoutMilestones(_WKRenderingProgressEvents events)
{
WebCore::LayoutMilestones milestones = 0;
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h (168117 => 168118)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h 2014-05-01 20:39:55 UTC (rev 168118)
@@ -90,6 +90,8 @@
@property (nonatomic, setter=_setAllowsRemoteInspection:) BOOL _allowsRemoteInspection;
+@property (nonatomic, setter=_setAddsVisitedLinks:) BOOL _addsVisitedLinks;
+
- (void)_close;
#if TARGET_OS_IPHONE
Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm (168117 => 168118)
--- trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm 2014-05-01 20:39:55 UTC (rev 168118)
@@ -33,6 +33,7 @@
#import <AppKit/NSAttributedString.h>
#endif
+#import "APIHistoryClient.h"
#import "AttributedString.h"
#import "ColorSpaceData.h"
#import "DataReference.h"
@@ -3407,6 +3408,8 @@
_data = [[WKViewData alloc] init];
_data->_pageClient = std::make_unique<PageClientImpl>(self, webView);
_data->_page = context.createWebPage(*_data->_pageClient, std::move(webPageConfiguration));
+ _data->_page->setAddsVisitedLinks(context.historyClient().addsVisitedLinks());
+
_data->_page->setIntrinsicDeviceScaleFactor([self _intrinsicDeviceScaleFactor]);
_data->_page->initializeWebPage();
Modified: trunk/Source/WebKit2/UIProcess/Cocoa/HistoryClient.h (168117 => 168118)
--- trunk/Source/WebKit2/UIProcess/Cocoa/HistoryClient.h 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/HistoryClient.h 2014-05-01 20:39:55 UTC (rev 168118)
@@ -46,7 +46,6 @@
virtual void didPerformServerRedirect(WebContext*, WebPageProxy*, const WTF::String& sourceURL, const WTF::String& destinationURL, WebFrameProxy*) override;
virtual void didUpdateHistoryTitle(WebContext*, WebPageProxy*, const WTF::String& title, const WTF::String& url, WebFrameProxy*) override;
virtual void populateVisitedLinks(WebContext*) override;
- virtual bool shouldTrackVisitedLinks() const override;
};
} // namespace WebKit
Modified: trunk/Source/WebKit2/UIProcess/Cocoa/HistoryClient.mm (168117 => 168118)
--- trunk/Source/WebKit2/UIProcess/Cocoa/HistoryClient.mm 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/HistoryClient.mm 2014-05-01 20:39:55 UTC (rev 168118)
@@ -86,11 +86,6 @@
{
}
-bool HistoryClient::shouldTrackVisitedLinks() const
-{
- return false;
-}
-
} // namespace webKit
#endif // WK_API_ENABLED
Modified: trunk/Source/WebKit2/UIProcess/VisitedLinkProvider.cpp (168117 => 168118)
--- trunk/Source/WebKit2/UIProcess/VisitedLinkProvider.cpp 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/UIProcess/VisitedLinkProvider.cpp 2014-05-01 20:39:55 UTC (rev 168118)
@@ -97,6 +97,16 @@
m_pendingVisitedLinksTimer.startOneShot(0);
}
+void VisitedLinkProvider::addVisitedLinkHashFromPage(uint64_t pageID, LinkHash linkHash)
+{
+ if (WebPageProxy* webPageProxy = WebProcessProxy::webPage(pageID)) {
+ if (!webPageProxy->addsVisitedLinks())
+ return;
+ }
+
+ addVisitedLinkHash(linkHash);
+}
+
static unsigned nextPowerOf2(unsigned v)
{
// Taken from http://www.cs.utk.edu/~vose/c-stuff/bithacks.html
Modified: trunk/Source/WebKit2/UIProcess/VisitedLinkProvider.h (168117 => 168118)
--- trunk/Source/WebKit2/UIProcess/VisitedLinkProvider.h 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/UIProcess/VisitedLinkProvider.h 2014-05-01 20:39:55 UTC (rev 168118)
@@ -59,6 +59,8 @@
// IPC::MessageReceiver
virtual void didReceiveMessage(IPC::Connection*, IPC::MessageDecoder&) override;
+ void addVisitedLinkHashFromPage(uint64_t pageID, WebCore::LinkHash);
+
void pendingVisitedLinksTimerFired();
void resizeTable(unsigned newTableSize);
Modified: trunk/Source/WebKit2/UIProcess/VisitedLinkProvider.messages.in (168117 => 168118)
--- trunk/Source/WebKit2/UIProcess/VisitedLinkProvider.messages.in 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/UIProcess/VisitedLinkProvider.messages.in 2014-05-01 20:39:55 UTC (rev 168118)
@@ -21,5 +21,5 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
messages -> VisitedLinkProvider {
- AddVisitedLinkHash(uint64_t linkHash)
+ AddVisitedLinkHashFromPage(uint64_t pageID, uint64_t linkHash)
}
Modified: trunk/Source/WebKit2/UIProcess/WebContext.cpp (168117 => 168118)
--- trunk/Source/WebKit2/UIProcess/WebContext.cpp 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/UIProcess/WebContext.cpp 2014-05-01 20:39:55 UTC (rev 168118)
@@ -281,8 +281,6 @@
m_historyClient = std::make_unique<API::HistoryClient>();
else
m_historyClient = std::move(historyClient);
-
- sendToAllProcesses(Messages::WebProcess::SetShouldTrackVisitedLinks(m_historyClient->shouldTrackVisitedLinks()));
}
void WebContext::setDownloadClient(std::unique_ptr<API::DownloadClient> downloadClient)
@@ -578,7 +576,6 @@
parameters.shouldUseTestingNetworkSession = m_shouldUseTestingNetworkSession;
- parameters.shouldTrackVisitedLinks = m_historyClient->shouldTrackVisitedLinks();
parameters.cacheModel = m_cacheModel;
parameters.languages = userPreferredLanguages();
Modified: trunk/Source/WebKit2/UIProcess/WebContext.h (168117 => 168118)
--- trunk/Source/WebKit2/UIProcess/WebContext.h 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/UIProcess/WebContext.h 2014-05-01 20:39:55 UTC (rev 168118)
@@ -139,6 +139,8 @@
void setMaximumNumberOfProcesses(unsigned); // Can only be called when there are no processes running.
unsigned maximumNumberOfProcesses() const { return m_webProcessCountLimit; }
+ const Vector<RefPtr<WebProcessProxy>>& processes() const { return m_processes; }
+
// WebProcess or NetworkProcess as approporiate for current process model. The connection must be non-null.
IPC::Connection* networkingProcessConnection();
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (168117 => 168118)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2014-05-01 20:39:55 UTC (rev 168118)
@@ -313,6 +313,7 @@
, m_pageID(pageID)
, m_session(*configuration.session)
, m_isPageSuspended(false)
+ , m_addsVisitedLinks(true)
#if ENABLE(REMOTE_INSPECTOR)
, m_allowsRemoteInspection(true)
#endif
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (168117 => 168118)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2014-05-01 20:39:55 UTC (rev 168118)
@@ -459,6 +459,9 @@
WebBackForwardList& backForwardList() { return m_backForwardList.get(); }
+ bool addsVisitedLinks() const { return m_addsVisitedLinks; }
+ void setAddsVisitedLinks(bool addsVisitedLinks) { m_addsVisitedLinks = addsVisitedLinks; }
+
#if ENABLE(INSPECTOR)
WebInspectorProxy* inspector();
#endif
@@ -1597,6 +1600,7 @@
Ref<API::Session> m_session;
bool m_isPageSuspended;
+ bool m_addsVisitedLinks;
#if ENABLE(REMOTE_INSPECTOR)
bool m_allowsRemoteInspection;
Modified: trunk/Source/WebKit2/WebProcess/WebPage/VisitedLinkTableController.cpp (168117 => 168118)
--- trunk/Source/WebKit2/WebProcess/WebPage/VisitedLinkTableController.cpp 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/WebProcess/WebPage/VisitedLinkTableController.cpp 2014-05-01 20:39:55 UTC (rev 168118)
@@ -28,6 +28,7 @@
#include "VisitedLinkProviderMessages.h"
#include "VisitedLinkTableControllerMessages.h"
+#include "WebPage.h"
#include "WebProcess.h"
#include <WebCore/PageCache.h>
#include <wtf/NeverDestroyed.h>
@@ -75,7 +76,7 @@
return m_visitedLinkTable.isLinkVisited(linkHash);
}
-void VisitedLinkTableController::addVisitedLink(Page&, LinkHash linkHash)
+void VisitedLinkTableController::addVisitedLink(Page& page, LinkHash linkHash)
{
if (m_visitedLinkTable.isLinkVisited(linkHash))
return;
@@ -83,7 +84,11 @@
if (!WebProcess::shared().shouldTrackVisitedLinks())
return;
- WebProcess::shared().parentProcessConnection()->send(Messages::VisitedLinkProvider::AddVisitedLinkHash(linkHash), m_identifier);
+ WebPage* webPage = WebPage::fromCorePage(&page);
+ if (!webPage)
+ return;
+
+ WebProcess::shared().parentProcessConnection()->send(Messages::VisitedLinkProvider::AddVisitedLinkHashFromPage(webPage->pageID(), linkHash), m_identifier);
}
void VisitedLinkTableController::setVisitedLinkTable(const SharedMemory::Handle& handle)
Modified: trunk/Source/WebKit2/WebProcess/WebProcess.cpp (168117 => 168118)
--- trunk/Source/WebKit2/WebProcess/WebProcess.cpp 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.cpp 2014-05-01 20:39:55 UTC (rev 168118)
@@ -296,7 +296,6 @@
if (!parameters.applicationCacheDirectory.isEmpty())
cacheStorage().setCacheDirectory(parameters.applicationCacheDirectory);
- setShouldTrackVisitedLinks(parameters.shouldTrackVisitedLinks);
setCacheModel(static_cast<uint32_t>(parameters.cacheModel));
if (!parameters.languages.isEmpty())
Modified: trunk/Source/WebKit2/WebProcess/WebProcess.h (168117 => 168118)
--- trunk/Source/WebKit2/WebProcess/WebProcess.h 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.h 2014-05-01 20:39:55 UTC (rev 168118)
@@ -115,6 +115,8 @@
mach_port_t compositingRenderServerPort() const { return m_compositingRenderServerPort; }
#endif
+ // FIXME: This is only used by the injected bundle for layout tests.
+ // WebKitTestRunner should just post a message to change whether visited links should be added.
bool shouldTrackVisitedLinks() const { return m_shouldTrackVisitedLinks; }
void setShouldTrackVisitedLinks(bool);
Modified: trunk/Source/WebKit2/WebProcess/WebProcess.messages.in (168117 => 168118)
--- trunk/Source/WebKit2/WebProcess/WebProcess.messages.in 2014-05-01 20:32:57 UTC (rev 168117)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.messages.in 2014-05-01 20:39:55 UTC (rev 168118)
@@ -28,7 +28,6 @@
CreateWebPage(uint64_t newPageID, WebKit::WebPageCreationParameters pageCreationParameters)
# Global preferences.
- SetShouldTrackVisitedLinks(bool shouldTrackVisitedLinks)
SetCacheModel(uint32_t cacheModel)
RegisterURLSchemeAsEmptyDocument(String scheme)
RegisterURLSchemeAsSecure(String scheme)