⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 242889 in webkit


Ignore:
Timestamp:
Mar 13, 2019, 10:48:47 AM (7 years ago)
Author:
Chris Dumez
Message:

Use new RegistrableDomain type in PSON code
https://bugs.webkit.org/show_bug.cgi?id=195634

Reviewed by Youenn Fablet.

Use new RegistrableDomain type in PSON code instead of more error-prone String type.

  • UIProcess/SuspendedPageProxy.cpp:

(WebKit::SuspendedPageProxy::SuspendedPageProxy):

  • UIProcess/SuspendedPageProxy.h:
  • UIProcess/WebProcessCache.cpp:

(WebKit::WebProcessCache::canCacheProcess const):
(WebKit::WebProcessCache::addProcessIfPossible):
(WebKit::WebProcessCache::takeProcess):
(WebKit::WebProcessCache::clearAllProcessesForSession):

  • UIProcess/WebProcessCache.h:
  • UIProcess/WebProcessPool.cpp:

(WebKit::WebProcessPool::addProcessToOriginCacheSet):
(WebKit::WebProcessPool::removeProcessFromOriginCacheSet):
(WebKit::WebProcessPool::processForNavigationInternal):
(WebKit::WebProcessPool::findReusableSuspendedPageProcess):
(WebKit::WebProcessPool::didCollectPrewarmInformation):
(WebKit::WebProcessPool::tryPrewarmWithDomainInformation):

  • UIProcess/WebProcessPool.h:
  • UIProcess/WebProcessProxy.cpp:

(WebKit::WebProcessProxy::canBeAddedToWebProcessCache const):
(WebKit::WebProcessProxy::maybeShutDown):
(WebKit::WebProcessProxy::didCollectPrewarmInformation):
(WebKit::WebProcessProxy::didStartProvisionalLoadForMainFrame):

  • UIProcess/WebProcessProxy.h:

(WebKit::WebProcessProxy::registrableDomain const):

  • UIProcess/WebProcessProxy.messages.in:
  • WebProcess/WebProcess.cpp:

(WebKit::WebProcess::sendPrewarmInformation):

Location:
trunk/Source/WebKit
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r242847 r242889  
     12019-03-13  Chris Dumez  <cdumez@apple.com>
     2
     3        Use new RegistrableDomain type in PSON code
     4        https://bugs.webkit.org/show_bug.cgi?id=195634
     5
     6        Reviewed by Youenn Fablet.
     7
     8        Use new RegistrableDomain type in PSON code instead of more error-prone String type.
     9
     10        * UIProcess/SuspendedPageProxy.cpp:
     11        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
     12        * UIProcess/SuspendedPageProxy.h:
     13        * UIProcess/WebProcessCache.cpp:
     14        (WebKit::WebProcessCache::canCacheProcess const):
     15        (WebKit::WebProcessCache::addProcessIfPossible):
     16        (WebKit::WebProcessCache::takeProcess):
     17        (WebKit::WebProcessCache::clearAllProcessesForSession):
     18        * UIProcess/WebProcessCache.h:
     19        * UIProcess/WebProcessPool.cpp:
     20        (WebKit::WebProcessPool::addProcessToOriginCacheSet):
     21        (WebKit::WebProcessPool::removeProcessFromOriginCacheSet):
     22        (WebKit::WebProcessPool::processForNavigationInternal):
     23        (WebKit::WebProcessPool::findReusableSuspendedPageProcess):
     24        (WebKit::WebProcessPool::didCollectPrewarmInformation):
     25        (WebKit::WebProcessPool::tryPrewarmWithDomainInformation):
     26        * UIProcess/WebProcessPool.h:
     27        * UIProcess/WebProcessProxy.cpp:
     28        (WebKit::WebProcessProxy::canBeAddedToWebProcessCache const):
     29        (WebKit::WebProcessProxy::maybeShutDown):
     30        (WebKit::WebProcessProxy::didCollectPrewarmInformation):
     31        (WebKit::WebProcessProxy::didStartProvisionalLoadForMainFrame):
     32        * UIProcess/WebProcessProxy.h:
     33        (WebKit::WebProcessProxy::registrableDomain const):
     34        * UIProcess/WebProcessProxy.messages.in:
     35        * WebProcess/WebProcess.cpp:
     36        (WebKit::WebProcess::sendPrewarmInformation):
     37
    1382019-03-13  Fujii Hironori  <Hironori.Fujii@sony.com>
    239
  • trunk/Source/WebKit/UIProcess/SuspendedPageProxy.cpp

    r242099 r242889  
    8383    , m_process(WTFMove(process))
    8484    , m_mainFrameID(mainFrameID)
    85     , m_registrableDomain(toRegistrableDomain(URL(URL(), item.url())))
     85    , m_registrableDomain(URL(URL(), item.url()))
    8686    , m_suspensionTimeoutTimer(RunLoop::main(), this, &SuspendedPageProxy::suspensionTimedOut)
    8787#if PLATFORM(IOS_FAMILY)
  • trunk/Source/WebKit/UIProcess/SuspendedPageProxy.h

    r241855 r242889  
    3030#include "WebBackForwardListItem.h"
    3131#include "WebPageProxyMessages.h"
    32 #include <WebCore/SecurityOriginData.h>
     32#include <WebCore/RegistrableDomain.h>
    3333#include <wtf/RefCounted.h>
    3434#include <wtf/WeakPtr.h>
     
    4848    WebProcessProxy& process() { return m_process.get(); }
    4949    uint64_t mainFrameID() const { return m_mainFrameID; }
    50     const String& registrableDomain() const { return m_registrableDomain; }
     50    const WebCore::RegistrableDomain& registrableDomain() const { return m_registrableDomain; }
    5151
    5252    bool failedToSuspend() const { return m_suspensionState == SuspensionState::FailedToSuspend; }
     
    7272    Ref<WebProcessProxy> m_process;
    7373    uint64_t m_mainFrameID;
    74     String m_registrableDomain;
     74    WebCore::RegistrableDomain m_registrableDomain;
    7575    bool m_isClosed { false };
    7676
  • trunk/Source/WebKit/UIProcess/WebProcessCache.cpp

    r242726 r242889  
    5656        return false;
    5757
     58    if (process.registrableDomain().isEmpty()) {
     59        RELEASE_LOG(ProcessSwapping, "%p - WebProcessCache::canCacheProcess(): Not caching process %i because it does not have an associated registrable domain", this, process.processIdentifier());
     60        return false;
     61    }
     62
    5863    if (MemoryPressureHandler::singleton().isUnderMemoryPressure()) {
    5964        RELEASE_LOG(ProcessSwapping, "%p - WebProcessCache::canCacheProcess(): Not caching process %i because we are under memory pressure", this, process.processIdentifier());
     
    7075}
    7176
    72 bool WebProcessCache::addProcessIfPossible(const String& registrableDomain, Ref<WebProcessProxy>&& process)
    73 {
    74     ASSERT(!registrableDomain.isEmpty());
     77bool WebProcessCache::addProcessIfPossible(Ref<WebProcessProxy>&& process)
     78{
    7579    ASSERT(!process->pageCount());
    7680    ASSERT(!process->provisionalPageCount());
     
    125129}
    126130
    127 RefPtr<WebProcessProxy> WebProcessCache::takeProcess(const String& registrableDomain, WebsiteDataStore& dataStore)
     131RefPtr<WebProcessProxy> WebProcessCache::takeProcess(const WebCore::RegistrableDomain& registrableDomain, WebsiteDataStore& dataStore)
    128132{
    129133    auto it = m_processesPerRegistrableDomain.find(registrableDomain);
     
    181185void WebProcessCache::clearAllProcessesForSession(PAL::SessionID sessionID)
    182186{
    183     Vector<String> keysToRemove;
     187    Vector<WebCore::RegistrableDomain> keysToRemove;
    184188    for (auto& pair : m_processesPerRegistrableDomain) {
    185189        if (pair.value->process().websiteDataStore().sessionID() == sessionID) {
  • trunk/Source/WebKit/UIProcess/WebProcessCache.h

    r242726 r242889  
    2727#pragma once
    2828
     29#include <WebCore/RegistrableDomain.h>
    2930#include <pal/SessionID.h>
    3031#include <wtf/HashMap.h>
     
    4344    explicit WebProcessCache(WebProcessPool&);
    4445
    45     bool addProcessIfPossible(const String& registrableDomain, Ref<WebProcessProxy>&&);
    46     RefPtr<WebProcessProxy> takeProcess(const String& registrableDomain, WebsiteDataStore&);
     46    bool addProcessIfPossible(Ref<WebProcessProxy>&&);
     47    RefPtr<WebProcessProxy> takeProcess(const WebCore::RegistrableDomain&, WebsiteDataStore&);
    4748
    4849    void updateCapacity(WebProcessPool&);
     
    8687
    8788    HashMap<uint64_t, std::unique_ptr<CachedProcess>> m_pendingAddRequests;
    88     HashMap<String, std::unique_ptr<CachedProcess>> m_processesPerRegistrableDomain;
     89    HashMap<WebCore::RegistrableDomain, std::unique_ptr<CachedProcess>> m_processesPerRegistrableDomain;
    8990    RunLoop::Timer<WebProcessCache> m_evictionTimer;
    9091};
  • trunk/Source/WebKit/UIProcess/WebProcessPool.cpp

    r242807 r242889  
    21602160void WebProcessPool::addProcessToOriginCacheSet(WebProcessProxy& process, const URL& url)
    21612161{
    2162     auto registrableDomain = toRegistrableDomain(url);
     2162    auto registrableDomain = WebCore::RegistrableDomain { url };
    21632163    auto result = m_swappedProcessesPerRegistrableDomain.add(registrableDomain, &process);
    21642164    if (!result.isNewEntry)
    21652165        result.iterator->value = &process;
    21662166
    2167     LOG(ProcessSwapping, "(ProcessSwapping) Registrable domain %s just saved a cached process with pid %i", registrableDomain.utf8().data(), process.processIdentifier());
     2167    LOG(ProcessSwapping, "(ProcessSwapping) Registrable domain %s just saved a cached process with pid %i", registrableDomain.string().utf8().data(), process.processIdentifier());
    21682168    if (!result.isNewEntry)
    21692169        LOG(ProcessSwapping, "(ProcessSwapping) Note: It already had one saved");
     
    21752175
    21762176    // FIXME: This can be very inefficient as the number of remembered origins and processes grows
    2177     Vector<String> registrableDomainsToRemove;
     2177    Vector<WebCore::RegistrableDomain> registrableDomainsToRemove;
    21782178    for (auto entry : m_swappedProcessesPerRegistrableDomain) {
    21792179        if (entry.value == &process)
     
    22132213{
    22142214    auto& targetURL = navigation.currentRequest().url();
    2215     auto registrableDomain = toRegistrableDomain(targetURL);
     2215    auto registrableDomain = WebCore::RegistrableDomain { targetURL };
    22162216
    22172217    auto createNewProcess = [this, protectedThis = makeRef(*this), page = makeRef(page), targetURL, registrableDomain, dataStore = dataStore.copyRef()] () -> Ref<WebProcessProxy> {
     
    23072307   
    23082308    if (m_configuration->alwaysKeepAndReuseSwappedProcesses()) {
    2309         LOG(ProcessSwapping, "(ProcessSwapping) Considering re-use of a previously cached process for domain %s", registrableDomain.utf8().data());
     2309        LOG(ProcessSwapping, "(ProcessSwapping) Considering re-use of a previously cached process for domain %s", registrableDomain.string().utf8().data());
    23102310
    23112311        if (auto* process = m_swappedProcessesPerRegistrableDomain.get(registrableDomain)) {
     
    23272327}
    23282328
    2329 RefPtr<WebProcessProxy> WebProcessPool::findReusableSuspendedPageProcess(const String& registrableDomain, WebPageProxy& page, WebsiteDataStore& dataStore)
     2329RefPtr<WebProcessProxy> WebProcessPool::findReusableSuspendedPageProcess(const WebCore::RegistrableDomain& registrableDomain, WebPageProxy& page, WebsiteDataStore& dataStore)
    23302330{
    23312331    auto it = m_suspendedPages.findIf([&](auto& suspendedPage) {
     
    24512451}
    24522452
    2453 void WebProcessPool::didCollectPrewarmInformation(const String& registrableDomain, const WebCore::PrewarmInformation& prewarmInformation)
     2453void WebProcessPool::didCollectPrewarmInformation(const WebCore::RegistrableDomain& registrableDomain, const WebCore::PrewarmInformation& prewarmInformation)
    24542454{
    24552455    static const size_t maximumSizeToPreventUnlimitedGrowth = 100;
     
    24662466void WebProcessPool::tryPrewarmWithDomainInformation(WebProcessProxy& process, const URL& url)
    24672467{
    2468     auto* prewarmInformation = m_prewarmInformationPerRegistrableDomain.get(toRegistrableDomain(url));
     2468    auto* prewarmInformation = m_prewarmInformationPerRegistrableDomain.get(RegistrableDomain { url });
    24692469    if (!prewarmInformation)
    24702470        return;
  • trunk/Source/WebKit/UIProcess/WebProcessPool.h

    r242807 r242889  
    468468    bool hasSuspendedPageFor(WebProcessProxy&, WebPageProxy&) const;
    469469    unsigned maxSuspendedPageCount() const { return m_maxSuspendedPageCount; }
    470     RefPtr<WebProcessProxy> findReusableSuspendedPageProcess(const String&, WebPageProxy&, WebsiteDataStore&);
     470    RefPtr<WebProcessProxy> findReusableSuspendedPageProcess(const WebCore::RegistrableDomain&, WebPageProxy&, WebsiteDataStore&);
    471471
    472472    void clearSuspendedPages(AllowProcessCaching);
     
    474474    void didReachGoodTimeToPrewarm(WebsiteDataStore&);
    475475
    476     void didCollectPrewarmInformation(const String& registrableDomain, const WebCore::PrewarmInformation&);
     476    void didCollectPrewarmInformation(const WebCore::RegistrableDomain&, const WebCore::PrewarmInformation&);
    477477
    478478    void screenPropertiesStateChanged();
     
    757757
    758758    UniqueRef<WebProcessCache> m_webProcessCache;
    759     HashMap<String, RefPtr<WebProcessProxy>> m_swappedProcessesPerRegistrableDomain;
    760 
    761     HashMap<String, std::unique_ptr<WebCore::PrewarmInformation>> m_prewarmInformationPerRegistrableDomain;
     759    HashMap<WebCore::RegistrableDomain, RefPtr<WebProcessProxy>> m_swappedProcessesPerRegistrableDomain;
     760
     761    HashMap<WebCore::RegistrableDomain, std::unique_ptr<WebCore::PrewarmInformation>> m_prewarmInformationPerRegistrableDomain;
    762762
    763763#if PLATFORM(MAC) && ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
  • trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp

    r242726 r242889  
    835835bool WebProcessProxy::canBeAddedToWebProcessCache() const
    836836{
    837     if (registrableDomain().isEmpty())
    838         return false;
    839 
    840837    if (isServiceWorkerProcess())
    841838        return false;
     
    852849        return;
    853850
    854     if (allowProcessCaching == AllowProcessCaching::Yes && canBeAddedToWebProcessCache() && processPool().webProcessCache().addProcessIfPossible(registrableDomain(), *this))
     851    if (allowProcessCaching == AllowProcessCaching::Yes && canBeAddedToWebProcessCache() && processPool().webProcessCache().addProcessIfPossible(*this))
    855852        return;
    856853
     
    14161413}
    14171414
    1418 void WebProcessProxy::didCollectPrewarmInformation(const String& domain, const WebCore::PrewarmInformation& prewarmInformation)
     1415void WebProcessProxy::didCollectPrewarmInformation(const WebCore::RegistrableDomain& domain, const WebCore::PrewarmInformation& prewarmInformation)
    14191416{
    14201417    processPool().didCollectPrewarmInformation(domain, prewarmInformation);
     
    14311428
    14321429    // This process has been used for several registrable domains already.
    1433     if (m_registrableDomain && m_registrableDomain->isNull())
    1434         return;
    1435 
    1436     auto registrableDomain = toRegistrableDomain(url);
     1430    if (m_registrableDomain && m_registrableDomain->isEmpty())
     1431        return;
     1432
     1433    auto registrableDomain = WebCore::RegistrableDomain { url };
    14371434    if (m_registrableDomain && *m_registrableDomain != registrableDomain) {
    14381435        // Null out registrable domain since this process has now been used for several domains.
    1439         m_registrableDomain = String();
     1436        m_registrableDomain = WebCore::RegistrableDomain { };
    14401437        return;
    14411438    }
  • trunk/Source/WebKit/UIProcess/WebProcessProxy.h

    r242400 r242889  
    4242#include <WebCore/MessagePortIdentifier.h>
    4343#include <WebCore/ProcessIdentifier.h>
     44#include <WebCore/RegistrableDomain.h>
    4445#include <WebCore/SharedStringHash.h>
    4546#include <memory>
     
    115116    WebProcessPool& processPool() const { ASSERT(m_processPool); return *m_processPool.get(); }
    116117
    117     String registrableDomain() const { return m_registrableDomain.valueOr(String()); }
     118    WebCore::RegistrableDomain registrableDomain() const { return m_registrableDomain.valueOr(WebCore::RegistrableDomain { }); }
    118119    void setIsInProcessCache(bool);
    119120    bool isInProcessCache() const { return m_isInProcessCache; }
     
    372373    bool canTerminateAuxiliaryProcess();
    373374
    374     void didCollectPrewarmInformation(const String& domain, const WebCore::PrewarmInformation&);
     375    void didCollectPrewarmInformation(const WebCore::RegistrableDomain&, const WebCore::PrewarmInformation&);
    375376
    376377    void logDiagnosticMessageForResourceLimitTermination(const String& limitKey);
     
    435436    HashMap<String, uint64_t> m_pageURLRetainCountMap;
    436437
    437     Optional<String> m_registrableDomain;
     438    Optional<WebCore::RegistrableDomain> m_registrableDomain;
    438439    bool m_isInProcessCache { false };
    439440
  • trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in

    r241778 r242889  
    6565    DidCheckProcessLocalPortForActivity(uint64_t callbackIdentifier, bool isLocallyReachable)
    6666
    67     DidCollectPrewarmInformation(String domain, struct WebCore::PrewarmInformation prewarmInformation)
     67    DidCollectPrewarmInformation(WebCore::RegistrableDomain domain, struct WebCore::PrewarmInformation prewarmInformation)
    6868
    6969#if PLATFORM(COCOA)
  • trunk/Source/WebKit/WebProcess/WebProcess.cpp

    r242748 r242889  
    15761576void WebProcess::sendPrewarmInformation(const URL& url)
    15771577{
    1578     auto registrableDomain = toRegistrableDomain(url);
     1578    auto registrableDomain = WebCore::RegistrableDomain { url };
    15791579    if (registrableDomain.isEmpty())
    15801580        return;
Note: See TracChangeset for help on using the changeset viewer.