Changeset 168118 in webkit


Ignore:
Timestamp:
May 1, 2014 1:39:55 PM (10 years ago)
Author:
andersca@apple.com
Message:

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:
Location:
trunk/Source/WebKit2
Files:
21 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r168117 r168118  
     12014-05-01  Anders Carlsson  <andersca@apple.com>
     2
     3        WKWebView doesn't track visited links (for visited link coloring)
     4        https://bugs.webkit.org/show_bug.cgi?id=132438
     5        <rdar://problem/16704519>
     6
     7        Reviewed by Dan Bernstein.
     8
     9        * Shared/WebProcessCreationParameters.cpp:
     10        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
     11        (WebKit::WebProcessCreationParameters::encode):
     12        (WebKit::WebProcessCreationParameters::decode):
     13        * Shared/WebProcessCreationParameters.h:
     14        * UIProcess/API/APIHistoryClient.h:
     15        (API::HistoryClient::addsVisitedLinks):
     16        (API::HistoryClient::shouldTrackVisitedLinks): Deleted.
     17        * UIProcess/API/C/WKContext.cpp:
     18        (WKContextSetHistoryClient):
     19        * UIProcess/API/Cocoa/WKWebView.mm:
     20        (-[WKWebView _addsVisitedLinks]):
     21        (-[WKWebView _setAddsVisitedLinks:]):
     22        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
     23        * UIProcess/API/mac/WKView.mm:
     24        (-[WKView initWithFrame:context:configuration:webView:]):
     25        * UIProcess/Cocoa/HistoryClient.h:
     26        * UIProcess/Cocoa/HistoryClient.mm:
     27        (WebKit::HistoryClient::shouldTrackVisitedLinks): Deleted.
     28        * UIProcess/VisitedLinkProvider.cpp:
     29        (WebKit::VisitedLinkProvider::addVisitedLinkHashFromPage):
     30        * UIProcess/VisitedLinkProvider.h:
     31        * UIProcess/VisitedLinkProvider.messages.in:
     32        * UIProcess/WebContext.cpp:
     33        (WebKit::WebContext::setHistoryClient):
     34        (WebKit::WebContext::createNewWebProcess):
     35        * UIProcess/WebContext.h:
     36        (WebKit::WebContext::processes):
     37        * UIProcess/WebPageProxy.cpp:
     38        (WebKit::WebPageProxy::WebPageProxy):
     39        * UIProcess/WebPageProxy.h:
     40        (WebKit::WebPageProxy::addsVisitedLinks):
     41        (WebKit::WebPageProxy::setAddsVisitedLinks):
     42        * WebProcess/WebPage/VisitedLinkTableController.cpp:
     43        (WebKit::VisitedLinkTableController::addVisitedLink):
     44        * WebProcess/WebProcess.cpp:
     45        (WebKit::WebProcess::initializeWebProcess):
     46        * WebProcess/WebProcess.h:
     47        * WebProcess/WebProcess.messages.in:
     48
    1492014-05-01  Benjamin Poulain  <bpoulain@apple.com>
    250
  • trunk/Source/WebKit2/Shared/WebProcessCreationParameters.cpp

    r168074 r168118  
    3333
    3434WebProcessCreationParameters::WebProcessCreationParameters()
    35     : shouldTrackVisitedLinks(false)
    36     , shouldAlwaysUseComplexTextCodePath(false)
     35    : shouldAlwaysUseComplexTextCodePath(false)
    3736    , shouldUseFontSmoothing(true)
    3837    , defaultRequestTimeoutInterval(INT_MAX)
     
    9493#endif
    9594    encoder.encodeEnum(cacheModel);
    96     encoder << shouldTrackVisitedLinks;
    9795    encoder << shouldAlwaysUseComplexTextCodePath;
    9896    encoder << shouldUseFontSmoothing;
     
    207205    if (!decoder.decodeEnum(parameters.cacheModel))
    208206        return false;
    209     if (!decoder.decode(parameters.shouldTrackVisitedLinks))
    210         return false;
    211207    if (!decoder.decode(parameters.shouldAlwaysUseComplexTextCodePath))
    212208        return false;
  • trunk/Source/WebKit2/Shared/WebProcessCreationParameters.h

    r168074 r168118  
    101101
    102102    CacheModel cacheModel;
    103     bool shouldTrackVisitedLinks;
    104103
    105104    bool shouldAlwaysUseComplexTextCodePath;
  • trunk/Source/WebKit2/UIProcess/API/APIHistoryClient.h

    r166914 r168118  
    4747    virtual void didUpdateHistoryTitle(WebKit::WebContext*, WebKit::WebPageProxy*, const WTF::String&, const WTF::String&, WebKit::WebFrameProxy*) { }
    4848    virtual void populateVisitedLinks(WebKit::WebContext*) { }
    49     virtual bool shouldTrackVisitedLinks() const { return false; }
     49
     50    // FIXME: This is only used by the legacy SPI. We should add an API::Context object that
     51    // can hold these things so we won't have to get it through API::HistoryClient.
     52    virtual bool addsVisitedLinks() const { return false; }
    5053};
    5154
  • trunk/Source/WebKit2/UIProcess/API/C/WKContext.cpp

    r167488 r168118  
    147147        }
    148148
    149         virtual bool shouldTrackVisitedLinks() const
     149        virtual bool addsVisitedLinks() const override
    150150        {
    151151            return m_client.populateVisitedLinks;
    152152        }
    153153    };
    154    
    155     toImpl(contextRef)->setHistoryClient(std::make_unique<HistoryClient>(wkClient));
     154
     155    WebKit::WebContext& context = *toImpl(contextRef);
     156    context.setHistoryClient(std::make_unique<HistoryClient>(wkClient));
     157
     158    bool addsVisitedLinks = context.historyClient().addsVisitedLinks();
     159
     160    for (auto& process : context.processes()) {
     161        for (auto& page : process->pages())
     162            page->setAddsVisitedLinks(addsVisitedLinks);
     163    }
    156164}
    157165
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm

    r168080 r168118  
    9494
    9595    WebKit::WeakObjCPtr<id <_WKFormDelegate>> _formDelegate;
    96 
    9796#if PLATFORM(IOS)
    9897    RetainPtr<WKScrollView> _scrollView;
     
    10051004    _page->setAllowsRemoteInspection(allow);
    10061005#endif
     1006}
     1007
     1008- (BOOL)_addsVisitedLinks
     1009{
     1010    return _page->addsVisitedLinks();
     1011}
     1012
     1013- (void)_setAddsVisitedLinks:(BOOL)addsVisitedLinks
     1014{
     1015    _page->setAddsVisitedLinks(addsVisitedLinks);
    10071016}
    10081017
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h

    r168063 r168118  
    9191@property (nonatomic, setter=_setAllowsRemoteInspection:) BOOL _allowsRemoteInspection;
    9292
     93@property (nonatomic, setter=_setAddsVisitedLinks:) BOOL _addsVisitedLinks;
     94
    9395- (void)_close;
    9496
  • trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm

    r167905 r168118  
    3434#endif
    3535
     36#import "APIHistoryClient.h"
    3637#import "AttributedString.h"
    3738#import "ColorSpaceData.h"
     
    34083409    _data->_pageClient = std::make_unique<PageClientImpl>(self, webView);
    34093410    _data->_page = context.createWebPage(*_data->_pageClient, std::move(webPageConfiguration));
     3411    _data->_page->setAddsVisitedLinks(context.historyClient().addsVisitedLinks());
     3412
    34103413    _data->_page->setIntrinsicDeviceScaleFactor([self _intrinsicDeviceScaleFactor]);
    34113414    _data->_page->initializeWebPage();
  • trunk/Source/WebKit2/UIProcess/Cocoa/HistoryClient.h

    r164258 r168118  
    4747    virtual void didUpdateHistoryTitle(WebContext*, WebPageProxy*, const WTF::String& title, const WTF::String& url, WebFrameProxy*) override;
    4848    virtual void populateVisitedLinks(WebContext*) override;
    49     virtual bool shouldTrackVisitedLinks() const override;
    5049};
    5150
  • trunk/Source/WebKit2/UIProcess/Cocoa/HistoryClient.mm

    r165604 r168118  
    8787}
    8888
    89 bool HistoryClient::shouldTrackVisitedLinks() const
    90 {
    91     return false;
    92 }
    93 
    9489} // namespace webKit
    9590
  • trunk/Source/WebKit2/UIProcess/VisitedLinkProvider.cpp

    r165639 r168118  
    9898}
    9999
     100void VisitedLinkProvider::addVisitedLinkHashFromPage(uint64_t pageID, LinkHash linkHash)
     101{
     102    if (WebPageProxy* webPageProxy = WebProcessProxy::webPage(pageID)) {
     103        if (!webPageProxy->addsVisitedLinks())
     104            return;
     105    }
     106
     107    addVisitedLinkHash(linkHash);
     108}
     109
    100110static unsigned nextPowerOf2(unsigned v)
    101111{
  • trunk/Source/WebKit2/UIProcess/VisitedLinkProvider.h

    r165619 r168118  
    6060    virtual void didReceiveMessage(IPC::Connection*, IPC::MessageDecoder&) override;
    6161
     62    void addVisitedLinkHashFromPage(uint64_t pageID, WebCore::LinkHash);
     63
    6264    void pendingVisitedLinksTimerFired();
    6365
  • trunk/Source/WebKit2/UIProcess/VisitedLinkProvider.messages.in

    r165619 r168118  
    2222
    2323messages -> VisitedLinkProvider {
    24     AddVisitedLinkHash(uint64_t linkHash)
     24    AddVisitedLinkHashFromPage(uint64_t pageID, uint64_t linkHash)
    2525}
  • trunk/Source/WebKit2/UIProcess/WebContext.cpp

    r168074 r168118  
    282282    else
    283283        m_historyClient = std::move(historyClient);
    284 
    285     sendToAllProcesses(Messages::WebProcess::SetShouldTrackVisitedLinks(m_historyClient->shouldTrackVisitedLinks()));
    286284}
    287285
     
    579577    parameters.shouldUseTestingNetworkSession = m_shouldUseTestingNetworkSession;
    580578
    581     parameters.shouldTrackVisitedLinks = m_historyClient->shouldTrackVisitedLinks();
    582579    parameters.cacheModel = m_cacheModel;
    583580    parameters.languages = userPreferredLanguages();
  • trunk/Source/WebKit2/UIProcess/WebContext.h

    r168074 r168118  
    140140    unsigned maximumNumberOfProcesses() const { return m_webProcessCountLimit; }
    141141
     142    const Vector<RefPtr<WebProcessProxy>>& processes() const { return m_processes; }
     143
    142144    // WebProcess or NetworkProcess as approporiate for current process model. The connection must be non-null.
    143145    IPC::Connection* networkingProcessConnection();
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r168038 r168118  
    314314    , m_session(*configuration.session)
    315315    , m_isPageSuspended(false)
     316    , m_addsVisitedLinks(true)
    316317#if ENABLE(REMOTE_INSPECTOR)
    317318    , m_allowsRemoteInspection(true)
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r168038 r168118  
    460460    WebBackForwardList& backForwardList() { return m_backForwardList.get(); }
    461461
     462    bool addsVisitedLinks() const { return m_addsVisitedLinks; }
     463    void setAddsVisitedLinks(bool addsVisitedLinks) { m_addsVisitedLinks = addsVisitedLinks; }
     464
    462465#if ENABLE(INSPECTOR)
    463466    WebInspectorProxy* inspector();
     
    15981601
    15991602    bool m_isPageSuspended;
     1603    bool m_addsVisitedLinks;
    16001604
    16011605#if ENABLE(REMOTE_INSPECTOR)
  • trunk/Source/WebKit2/WebProcess/WebPage/VisitedLinkTableController.cpp

    r165619 r168118  
    2929#include "VisitedLinkProviderMessages.h"
    3030#include "VisitedLinkTableControllerMessages.h"
     31#include "WebPage.h"
    3132#include "WebProcess.h"
    3233#include <WebCore/PageCache.h>
     
    7677}
    7778
    78 void VisitedLinkTableController::addVisitedLink(Page&, LinkHash linkHash)
     79void VisitedLinkTableController::addVisitedLink(Page& page, LinkHash linkHash)
    7980{
    8081    if (m_visitedLinkTable.isLinkVisited(linkHash))
     
    8485        return;
    8586
    86     WebProcess::shared().parentProcessConnection()->send(Messages::VisitedLinkProvider::AddVisitedLinkHash(linkHash), m_identifier);
     87    WebPage* webPage = WebPage::fromCorePage(&page);
     88    if (!webPage)
     89        return;
     90
     91    WebProcess::shared().parentProcessConnection()->send(Messages::VisitedLinkProvider::AddVisitedLinkHashFromPage(webPage->pageID(), linkHash), m_identifier);
    8792}
    8893
  • trunk/Source/WebKit2/WebProcess/WebProcess.cpp

    r168074 r168118  
    297297        cacheStorage().setCacheDirectory(parameters.applicationCacheDirectory);
    298298
    299     setShouldTrackVisitedLinks(parameters.shouldTrackVisitedLinks);
    300299    setCacheModel(static_cast<uint32_t>(parameters.cacheModel));
    301300
  • trunk/Source/WebKit2/WebProcess/WebProcess.h

    r168074 r168118  
    116116#endif
    117117
     118    // FIXME: This is only used by the injected bundle for layout tests.
     119    // WebKitTestRunner should just post a message to change whether visited links should be added.
    118120    bool shouldTrackVisitedLinks() const { return m_shouldTrackVisitedLinks; }
    119121    void setShouldTrackVisitedLinks(bool);
  • trunk/Source/WebKit2/WebProcess/WebProcess.messages.in

    r168074 r168118  
    2929
    3030    # Global preferences.
    31     SetShouldTrackVisitedLinks(bool shouldTrackVisitedLinks)
    3231    SetCacheModel(uint32_t cacheModel)
    3332    RegisterURLSchemeAsEmptyDocument(String scheme)
Note: See TracChangeset for help on using the changeset viewer.