Changeset 223713 in webkit


Ignore:
Timestamp:
Oct 19, 2017 2:31:17 PM (7 years ago)
Author:
Chris Dumez
Message:

Service Worker process should not be selected to open WebView on it
https://bugs.webkit.org/show_bug.cgi?id=178527

Patch by Youenn Fablet <youenn@apple.com> on 2017-10-19
Reviewed by Chris Dumez.

Selection of process to open a page will no longer use an existing web process if it is the service worker process.

  • UIProcess/WebProcessPool.cpp:

(WebKit::WebProcessPool::createNewWebProcessRespectingProcessCountLimit):

Location:
trunk/Source/WebKit
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r223710 r223713  
     12017-10-19  Youenn Fablet  <youenn@apple.com>
     2
     3        Service Worker process should not be selected to open WebView on it
     4        https://bugs.webkit.org/show_bug.cgi?id=178527
     5
     6        Reviewed by Chris Dumez.
     7
     8        Selection of process to open a page will no longer use an existing web process if it is the service worker process.
     9
     10        * UIProcess/WebProcessPool.cpp:
     11        (WebKit::WebProcessPool::createNewWebProcessRespectingProcessCountLimit):
     12
    1132017-10-19  Tim Horton  <timothy_horton@apple.com>
    214
  • trunk/Source/WebKit/UIProcess/WebProcessPool.cpp

    r223242 r223713  
    938938        return createNewWebProcess(websiteDataStore);
    939939
    940     Vector<RefPtr<WebProcessProxy>> processesMatchingDataStore;
    941     if (mustMatchDataStore) {
    942         for (auto& process : m_processes) {
    943             if (&process->websiteDataStore() == &websiteDataStore)
    944                 processesMatchingDataStore.append(process);
    945         }
    946 
    947         if (processesMatchingDataStore.isEmpty())
    948             return createNewWebProcess(websiteDataStore);
    949     }
    950 
    951     // Choose the process with fewest pages.
    952     auto* processes = mustMatchDataStore ? &processesMatchingDataStore : &m_processes;
    953     ASSERT(!processes->isEmpty());
    954     auto& process = *std::min_element(processes->begin(), processes->end(), [](const RefPtr<WebProcessProxy>& a, const RefPtr<WebProcessProxy>& b) {
    955         return a->pageCount() < b->pageCount();
    956     });
    957 
    958     return *process;
     940    WebProcessProxy* processToReuse = nullptr;
     941    for (auto& process : m_processes) {
     942        if (mustMatchDataStore && &process->websiteDataStore() != &websiteDataStore)
     943            continue;
     944#if ENABLE(SERVICE_WORKER)
     945        if (process.get() == m_workerContextProcess)
     946            continue;
     947#endif
     948        // Choose the process with fewest pages.
     949        if (!processToReuse || processToReuse->pageCount() > process->pageCount())
     950            processToReuse = process.get();
     951    }
     952    return processToReuse ? *processToReuse : createNewWebProcess(websiteDataStore);
    959953}
    960954
Note: See TracChangeset for help on using the changeset viewer.