Changeset 83774 in webkit


Ignore:
Timestamp:
Apr 13, 2011 3:24:28 PM (13 years ago)
Author:
andersca@apple.com
Message:

2011-04-13 Anders Carlsson <andersca@apple.com>

Reviewed by Adam Roben.

Convert WebProcess over to using disableTermination/enableTermination
https://bugs.webkit.org/show_bug.cgi?id=58485

  • PluginProcess/PluginProcess.cpp: (WebKit::PluginProcess::getSitesWithData): (WebKit::PluginProcess::clearSiteData): Use the LocalTerminationDisabler RAII class.
  • Shared/ChildProcess.h: (WebKit::ChildProcess::LocalTerminationDisabler::LocalTerminationDisabler): (WebKit::ChildProcess::LocalTerminationDisabler::~LocalTerminationDisabler): Add RAII class for calling disableTermination/enableTermination.
  • WebProcess/ApplicationCache/WebApplicationCacheManager.cpp: (WebKit::WebApplicationCacheManager::getApplicationCacheOrigins): (WebKit::WebApplicationCacheManager::deleteEntriesForOrigin): (WebKit::WebApplicationCacheManager::deleteAllEntries): Use the LocalTerminationDisabler RAII class.
  • WebProcess/Cookies/WebCookieManager.cpp: (WebKit::WebCookieManager::getHostnamesWithCookies): (WebKit::WebCookieManager::deleteCookiesForHostname): (WebKit::WebCookieManager::deleteAllCookies): (WebKit::WebCookieManager::startObservingCookieChanges): (WebKit::WebCookieManager::setHTTPCookieAcceptPolicy): (WebKit::WebCookieManager::getHTTPCookieAcceptPolicy): Use the LocalTerminationDisabler RAII class.
  • WebProcess/Downloads/Download.cpp: (WebKit::Download::Download): Call disableTermination().

(WebKit::Download::~Download):
Call enableTermination().

  • WebProcess/Downloads/DownloadManager.cpp: (WebKit::DownloadManager::downloadFinished): Remove call to terminateIfPossible.
  • WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp: (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins): (WebKit::WebKeyValueStorageManager::deleteEntriesForOrigin): (WebKit::WebKeyValueStorageManager::deleteAllEntries): Use the LocalTerminationDisabler RAII class.


  • WebProcess/MediaCache/WebMediaCacheManager.cpp: (WebKit::WebMediaCacheManager::getHostnamesWithMediaCache): (WebKit::WebMediaCacheManager::clearCacheForHostname): (WebKit::WebMediaCacheManager::clearCacheForAllHostnames): Use the LocalTerminationDisabler RAII class.


  • WebProcess/ResourceCache/WebResourceCacheManager.cpp: (WebKit::WebResourceCacheManager::getCacheOrigins): (WebKit::WebResourceCacheManager::clearCacheForOrigin): (WebKit::WebResourceCacheManager::clearCacheForAllOrigins): Use the LocalTerminationDisabler RAII class.


  • WebProcess/WebCoreSupport/WebDatabaseManager.cpp: (WebKit::WebDatabaseManager::getDatabasesByOrigin): (WebKit::WebDatabaseManager::getDatabaseOrigins): (WebKit::WebDatabaseManager::deleteDatabaseWithNameForOrigin): (WebKit::WebDatabaseManager::deleteDatabasesForOrigin): (WebKit::WebDatabaseManager::deleteAllDatabases): (WebKit::WebDatabaseManager::setQuotaForOrigin): Use the LocalTerminationDisabler RAII class.


  • WebProcess/WebProcess.cpp: (WebKit::WebProcess::createWebPage): Call disableTermination().

(WebKit::WebProcess::removeWebPage):
Call enableTermination().

(WebKit::WebProcess::shouldTerminate):
Move logic from terminateIfPossible over here.

(WebKit::WebProcess::terminate):
Move logic from terminateIfPossible over here.

(WebKit::WebProcess::getSitesWithPluginData):
(WebKit::WebProcess::clearPluginSiteData):
Use the LocalTerminationDisabler RAII class.

  • WebProcess/WebProcess.h: Publically inherit from ChildProcess, LocalTerminationDisabler needs to be accessible from the WebProcess class.
Location:
trunk/Source/WebKit2
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r83772 r83774  
     12011-04-13  Anders Carlsson  <andersca@apple.com>
     2
     3        Reviewed by Adam Roben.
     4
     5        Convert WebProcess over to using disableTermination/enableTermination
     6        https://bugs.webkit.org/show_bug.cgi?id=58485
     7
     8        * PluginProcess/PluginProcess.cpp:
     9        (WebKit::PluginProcess::getSitesWithData):
     10        (WebKit::PluginProcess::clearSiteData):
     11        Use the LocalTerminationDisabler RAII class.
     12
     13        * Shared/ChildProcess.h:
     14        (WebKit::ChildProcess::LocalTerminationDisabler::LocalTerminationDisabler):
     15        (WebKit::ChildProcess::LocalTerminationDisabler::~LocalTerminationDisabler):
     16        Add RAII class for calling disableTermination/enableTermination.
     17
     18        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
     19        (WebKit::WebApplicationCacheManager::getApplicationCacheOrigins):
     20        (WebKit::WebApplicationCacheManager::deleteEntriesForOrigin):
     21        (WebKit::WebApplicationCacheManager::deleteAllEntries):
     22        Use the LocalTerminationDisabler RAII class.
     23
     24        * WebProcess/Cookies/WebCookieManager.cpp:
     25        (WebKit::WebCookieManager::getHostnamesWithCookies):
     26        (WebKit::WebCookieManager::deleteCookiesForHostname):
     27        (WebKit::WebCookieManager::deleteAllCookies):
     28        (WebKit::WebCookieManager::startObservingCookieChanges):
     29        (WebKit::WebCookieManager::setHTTPCookieAcceptPolicy):
     30        (WebKit::WebCookieManager::getHTTPCookieAcceptPolicy):
     31        Use the LocalTerminationDisabler RAII class.
     32
     33        * WebProcess/Downloads/Download.cpp:
     34        (WebKit::Download::Download):
     35        Call disableTermination().
     36
     37        (WebKit::Download::~Download):
     38        Call enableTermination().
     39
     40        * WebProcess/Downloads/DownloadManager.cpp:
     41        (WebKit::DownloadManager::downloadFinished):
     42        Remove call to terminateIfPossible.
     43
     44        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp:
     45        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
     46        (WebKit::WebKeyValueStorageManager::deleteEntriesForOrigin):
     47        (WebKit::WebKeyValueStorageManager::deleteAllEntries):
     48        Use the LocalTerminationDisabler RAII class.
     49       
     50        * WebProcess/MediaCache/WebMediaCacheManager.cpp:
     51        (WebKit::WebMediaCacheManager::getHostnamesWithMediaCache):
     52        (WebKit::WebMediaCacheManager::clearCacheForHostname):
     53        (WebKit::WebMediaCacheManager::clearCacheForAllHostnames):
     54        Use the LocalTerminationDisabler RAII class.
     55       
     56        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
     57        (WebKit::WebResourceCacheManager::getCacheOrigins):
     58        (WebKit::WebResourceCacheManager::clearCacheForOrigin):
     59        (WebKit::WebResourceCacheManager::clearCacheForAllOrigins):
     60        Use the LocalTerminationDisabler RAII class.
     61       
     62        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
     63        (WebKit::WebDatabaseManager::getDatabasesByOrigin):
     64        (WebKit::WebDatabaseManager::getDatabaseOrigins):
     65        (WebKit::WebDatabaseManager::deleteDatabaseWithNameForOrigin):
     66        (WebKit::WebDatabaseManager::deleteDatabasesForOrigin):
     67        (WebKit::WebDatabaseManager::deleteAllDatabases):
     68        (WebKit::WebDatabaseManager::setQuotaForOrigin):
     69        Use the LocalTerminationDisabler RAII class.
     70       
     71        * WebProcess/WebProcess.cpp:
     72        (WebKit::WebProcess::createWebPage):
     73        Call disableTermination().
     74
     75        (WebKit::WebProcess::removeWebPage):
     76        Call enableTermination().
     77
     78        (WebKit::WebProcess::shouldTerminate):
     79        Move logic from terminateIfPossible over here.
     80
     81        (WebKit::WebProcess::terminate):
     82        Move logic from terminateIfPossible over here.
     83
     84        (WebKit::WebProcess::getSitesWithPluginData):
     85        (WebKit::WebProcess::clearPluginSiteData):
     86        Use the LocalTerminationDisabler RAII class.
     87
     88        * WebProcess/WebProcess.h:
     89        Publically inherit from ChildProcess, LocalTerminationDisabler needs to be accessible
     90        from the WebProcess class.
     91
    1922011-04-13  Steve Falkenburg  <sfalken@apple.com>
    293
  • trunk/Source/WebKit2/PluginProcess/PluginProcess.cpp

    r83767 r83774  
    168168void PluginProcess::getSitesWithData(uint64_t callbackID)
    169169{
    170     disableTermination();
     170    LocalTerminationDisabler terminationDisabler(*this);
    171171
    172172    Vector<String> sites;
     
    175175
    176176    m_connection->send(Messages::PluginProcessProxy::DidGetSitesWithData(sites, callbackID), 0);
    177 
    178     enableTermination();
    179177}
    180178
    181179void PluginProcess::clearSiteData(const Vector<String>& sites, uint64_t flags, uint64_t maxAgeInSeconds, uint64_t callbackID)
    182180{
    183     disableTermination();
     181    LocalTerminationDisabler terminationDisabler(*this);
    184182
    185183    if (NetscapePluginModule* module = netscapePluginModule()) {
     
    194192
    195193    m_connection->send(Messages::PluginProcessProxy::DidClearSiteData(callbackID), 0);
    196 
    197     enableTermination();
    198194}
    199195
  • trunk/Source/WebKit2/Shared/ChildProcess.h

    r83767 r83774  
    4141    void enableTermination();
    4242
     43    class LocalTerminationDisabler {
     44    public:
     45        explicit LocalTerminationDisabler(ChildProcess& childProcess)
     46            : m_childProcess(childProcess)
     47        {
     48            m_childProcess.disableTermination();
     49        }
     50
     51        ~LocalTerminationDisabler()
     52        {
     53            m_childProcess.enableTermination();
     54        }
     55
     56    private:
     57        ChildProcess& m_childProcess;
     58    };
     59
    4360protected:
    4461    explicit ChildProcess(double terminationTimeout);
  • trunk/Source/WebKit2/WebProcess/ApplicationCache/WebApplicationCacheManager.cpp

    r82458 r83774  
    5757void WebApplicationCacheManager::getApplicationCacheOrigins(uint64_t callbackID)
    5858{
     59    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     60
    5961    HashSet<RefPtr<SecurityOrigin>, SecurityOriginHash> origins;
    6062
     
    8082
    8183    WebProcess::shared().connection()->send(Messages::WebApplicationCacheManagerProxy::DidGetApplicationCacheOrigins(identifiers, callbackID), 0);
    82     WebProcess::shared().terminateIfPossible();
    8384}
    8485
    8586void WebApplicationCacheManager::deleteEntriesForOrigin(const SecurityOriginData& originData)
    8687{
     88    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     89
    8790#if ENABLE(OFFLINE_WEB_APPLICATIONS)
    8891    RefPtr<SecurityOrigin> origin = SecurityOrigin::create(originData.protocol, originData.host, originData.port);
     
    9295    ApplicationCache::deleteCacheForOrigin(origin.get());
    9396#endif
    94     WebProcess::shared().terminateIfPossible();
    9597}
    9698
    9799void WebApplicationCacheManager::deleteAllEntries()
    98100{
     101    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     102
    99103#if ENABLE(OFFLINE_WEB_APPLICATIONS)
    100104    cacheStorage().deleteAllEntries();
    101105#endif
    102     WebProcess::shared().terminateIfPossible();
    103106}
    104107
  • trunk/Source/WebKit2/WebProcess/Cookies/WebCookieManager.cpp

    r82458 r83774  
    5555void WebCookieManager::getHostnamesWithCookies(uint64_t callbackID)
    5656{
     57    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     58
    5759    HashSet<String> hostnames;
    5860
     
    6365
    6466    WebProcess::shared().connection()->send(Messages::WebCookieManagerProxy::DidGetHostnamesWithCookies(hostnameList, callbackID), 0);
    65     WebProcess::shared().terminateIfPossible();
    6667}
    6768
    6869void WebCookieManager::deleteCookiesForHostname(const String& hostname)
    6970{
     71    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     72
    7073    WebCore::deleteCookiesForHostname(hostname);
    71     WebProcess::shared().terminateIfPossible();
    7274}
    7375
    7476void WebCookieManager::deleteAllCookies()
    7577{
     78    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     79
    7680    WebCore::deleteAllCookies();
    77     WebProcess::shared().terminateIfPossible();
    7881}
    7982
    8083void WebCookieManager::startObservingCookieChanges()
    8184{
     85    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     86
    8287    WebCore::startObservingCookieChanges();
    83     WebProcess::shared().terminateIfPossible();
    8488}
    8589
     
    96100void WebCookieManager::setHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy)
    97101{
     102    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
    98103    platformSetHTTPCookieAcceptPolicy(policy);
    99     WebProcess::shared().terminateIfPossible();
    100104}
    101105
    102106void WebCookieManager::getHTTPCookieAcceptPolicy(uint64_t callbackID)
    103107{
     108    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
    104109    WebProcess::shared().connection()->send(Messages::WebCookieManagerProxy::DidGetHTTPCookieAcceptPolicy(platformGetHTTPCookieAcceptPolicy(), callbackID), 0);
    105     WebProcess::shared().terminateIfPossible();
    106110}
    107111
  • trunk/Source/WebKit2/WebProcess/Downloads/Download.cpp

    r82364 r83774  
    5353{
    5454    ASSERT(m_downloadID);
     55
     56    WebProcess::shared().disableTermination();
    5557}
    5658
     
    5860{
    5961    platformInvalidate();
     62
     63    WebProcess::shared().enableTermination();
    6064}
    6165
  • trunk/Source/WebKit2/WebProcess/Downloads/DownloadManager.cpp

    r79372 r83774  
    7878
    7979    delete download;
    80 
    81     WebProcess::shared().terminateIfPossible();
    8280}
    8381
  • trunk/Source/WebKit2/WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp

    r82458 r83774  
    5858void WebKeyValueStorageManager::getKeyValueStorageOrigins(uint64_t callbackID)
    5959{
     60    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     61
    6062    Vector<RefPtr<SecurityOrigin> > coreOrigins;
    6163
     
    7779
    7880    WebProcess::shared().connection()->send(Messages::WebKeyValueStorageManagerProxy::DidGetKeyValueStorageOrigins(identifiers, callbackID), 0);
    79     WebProcess::shared().terminateIfPossible();
    8081}
    8182
    8283void WebKeyValueStorageManager::deleteEntriesForOrigin(const SecurityOriginData& originData)
    8384{
     85    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     86
    8487    RefPtr<SecurityOrigin> origin = SecurityOrigin::create(originData.protocol, originData.host, originData.port);
    8588    if (!origin)
     
    8790
    8891    StorageTracker::tracker().deleteOrigin(origin.get());
    89     WebProcess::shared().terminateIfPossible();
    9092}
    9193
    9294void WebKeyValueStorageManager::deleteAllEntries()
    9395{
     96    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
    9497    StorageTracker::tracker().deleteAllOrigins();
    95     WebProcess::shared().terminateIfPossible();
    9698}
    9799
  • trunk/Source/WebKit2/WebProcess/MediaCache/WebMediaCacheManager.cpp

    r82458 r83774  
    5454void WebMediaCacheManager::getHostnamesWithMediaCache(uint64_t callbackID)
    5555{
     56    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     57
    5658    Vector<String> mediaCacheHostnames;
    5759
     
    6163
    6264    WebProcess::shared().connection()->send(Messages::WebMediaCacheManagerProxy::DidGetHostnamesWithMediaCache(mediaCacheHostnames, callbackID), 0);
    63     WebProcess::shared().terminateIfPossible();
    6465}
    6566
    6667void WebMediaCacheManager::clearCacheForHostname(const String& hostname)
    6768{
     69    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     70
    6871#if ENABLE(VIDEO)
    6972    HTMLMediaElement::clearMediaCacheForSite(hostname);
    7073#endif
    71     WebProcess::shared().terminateIfPossible();
    7274}
    7375
    7476void WebMediaCacheManager::clearCacheForAllHostnames()
    7577{
     78    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     79
    7680#if ENABLE(VIDEO)
    7781    HTMLMediaElement::clearMediaCache();
    7882#endif
    79     WebProcess::shared().terminateIfPossible();
    8083}
    8184
  • trunk/Source/WebKit2/WebProcess/ResourceCache/WebResourceCacheManager.cpp

    r83054 r83774  
    6464void WebResourceCacheManager::getCacheOrigins(uint64_t callbackID) const
    6565{
     66    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     67
    6668    MemoryCache::SecurityOriginSet origins;
    6769    memoryCache()->getOriginsWithCache(origins);
     
    9597
    9698    WebProcess::shared().connection()->send(Messages::WebResourceCacheManagerProxy::DidGetCacheOrigins(identifiers, callbackID), 0);
    97     WebProcess::shared().terminateIfPossible();
    9899}
    99100
    100101void WebResourceCacheManager::clearCacheForOrigin(SecurityOriginData originData, uint32_t cachesToClear) const
    101102{
     103    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     104
    102105#if USE(CFURLCACHE)
    103106    ResourceCachesToClear resourceCachesToClear = static_cast<ResourceCachesToClear>(cachesToClear);
     
    121124    }
    122125#endif
    123     WebProcess::shared().terminateIfPossible();
    124126}
    125127
    126128void WebResourceCacheManager::clearCacheForAllOrigins(uint32_t cachesToClear) const
    127129{
     130    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     131
    128132    ResourceCachesToClear resourceCachesToClear = static_cast<ResourceCachesToClear>(cachesToClear);
    129133
    130134    WebProcess::shared().clearResourceCaches(resourceCachesToClear);
    131     WebProcess::shared().terminateIfPossible();
    132135}
    133136
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.cpp

    r82458 r83774  
    6868void WebDatabaseManager::getDatabasesByOrigin(uint64_t callbackID) const
    6969{
     70    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     71
    7072    // FIXME: This could be made more efficient by adding a function to DatabaseTracker
    7173    // to get both the origins and the Vector of DatabaseDetails for each origin in one
     
    106108
    107109    WebProcess::shared().connection()->send(Messages::WebDatabaseManagerProxy::DidGetDatabasesByOrigin(originAndDatabasesVector, callbackID), 0);
    108     WebProcess::shared().terminateIfPossible();
    109110}
    110111
    111112void WebDatabaseManager::getDatabaseOrigins(uint64_t callbackID) const
    112113{
     114    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     115
    113116    Vector<RefPtr<SecurityOrigin> > origins;
    114117    DatabaseTracker::tracker().origins(origins);
     
    120123        identifiers[i] = origins[i]->databaseIdentifier();
    121124    WebProcess::shared().connection()->send(Messages::WebDatabaseManagerProxy::DidGetDatabaseOrigins(identifiers, callbackID), 0);
    122     WebProcess::shared().terminateIfPossible();
    123125}
    124126
    125127void WebDatabaseManager::deleteDatabaseWithNameForOrigin(const String& databaseIdentifier, const String& originIdentifier) const
    126128{
     129    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     130
    127131    RefPtr<SecurityOrigin> origin = SecurityOrigin::createFromDatabaseIdentifier(originIdentifier);
    128132    if (!origin)
     
    130134
    131135    DatabaseTracker::tracker().deleteDatabase(origin.get(), databaseIdentifier);
    132     WebProcess::shared().terminateIfPossible();
    133136}
    134137
    135138void WebDatabaseManager::deleteDatabasesForOrigin(const String& originIdentifier) const
    136139{
     140    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     141
    137142    RefPtr<SecurityOrigin> origin = SecurityOrigin::createFromDatabaseIdentifier(originIdentifier);
    138143    if (!origin)
     
    140145
    141146    DatabaseTracker::tracker().deleteOrigin(origin.get());
    142     WebProcess::shared().terminateIfPossible();
    143147}
    144148
    145149void WebDatabaseManager::deleteAllDatabases() const
    146150{
     151    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     152
    147153    DatabaseTracker::tracker().deleteAllDatabases();
    148     WebProcess::shared().terminateIfPossible();
    149154}
    150155
    151156void WebDatabaseManager::setQuotaForOrigin(const String& originIdentifier, unsigned long long quota) const
    152157{
     158    WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared());
     159
    153160    // If the quota is set to a value lower than the current usage, that quota will
    154161    // "stick" but no data will be purged to meet the new quota. This will simply
     
    160167
    161168    DatabaseTracker::tracker().setQuota(origin.get(), quota);
    162     WebProcess::shared().terminateIfPossible();
    163169}
    164170
  • trunk/Source/WebKit2/WebProcess/WebProcess.cpp

    r83767 r83774  
    491491        ASSERT(!result.first->second);
    492492        result.first->second = WebPage::create(pageID, parameters);
     493
     494        // Balanced by an enableTermination in removeWebPage.
     495        disableTermination();
    493496    }
    494497
     
    498501void WebProcess::removeWebPage(uint64_t pageID)
    499502{
     503    ASSERT(m_pageMap.contains(pageID));
     504
    500505    m_pageMap.remove(pageID);
    501     terminateIfPossible();
     506
     507    enableTermination();
    502508}
    503509
     
    508514}
    509515 
    510 void WebProcess::terminateIfPossible()
    511 {
    512     if (!m_pageMap.isEmpty())
    513         return;
    514 
    515     if (m_inDidClose)
    516         return;
    517 
    518     if (DownloadManager::shared().isDownloading())
    519         return;
    520 
     516bool WebProcess::shouldTerminate()
     517{
    521518    // Keep running forever if we're running in the same process.
    522519    if (!isSeparateProcess())
    523         return;
     520        return false;
     521
     522    ASSERT(m_pageMap.isEmpty());
     523    ASSERT(!DownloadManager::shared().isDownloading());
    524524
    525525    // FIXME: the ShouldTerminate message should also send termination parameters, such as any session cookies that need to be preserved.
     
    527527    if (m_connection->sendSync(Messages::WebProcessProxy::ShouldTerminate(), Messages::WebProcessProxy::ShouldTerminate::Reply(shouldTerminate), 0)
    528528        && !shouldTerminate)
    529         return;
    530 
    531     // Actually terminate the process.
    532 
     529        return false;
     530
     531    return true;
     532}
     533
     534void WebProcess::terminate()
     535{
    533536#ifndef NDEBUG
    534537    gcController().garbageCollectNow();
     
    542545    platformTerminate();
    543546    m_runLoop->stop();
    544 }
    545 
    546 bool WebProcess::shouldTerminate()
    547 {
    548     // FIXME: Implement.
    549     ASSERT_NOT_REACHED();
    550     return false;
    551547}
    552548
     
    737733void WebProcess::getSitesWithPluginData(const Vector<String>& pluginPaths, uint64_t callbackID)
    738734{
     735    LocalTerminationDisabler terminationDisabler(*this);
     736
    739737    HashSet<String> sitesSet;
    740738
     
    753751
    754752    m_connection->send(Messages::WebContext::DidGetSitesWithPluginData(sites, callbackID), 0);
    755     terminateIfPossible();
    756753}
    757754
    758755void WebProcess::clearPluginSiteData(const Vector<String>& pluginPaths, const Vector<String>& sites, uint64_t flags, uint64_t maxAgeInSeconds, uint64_t callbackID)
    759756{
     757    LocalTerminationDisabler terminationDisabler(*this);
     758
    760759    for (size_t i = 0; i < pluginPaths.size(); ++i) {
    761760        RefPtr<NetscapePluginModule> netscapePluginModule = NetscapePluginModule::getOrCreate(pluginPaths[i]);
     
    774773
    775774    m_connection->send(Messages::WebContext::DidClearPluginSiteData(callbackID), 0);
    776     terminateIfPossible();
    777775}
    778776#endif
  • trunk/Source/WebKit2/WebProcess/WebProcess.h

    r83767 r83774  
    6767struct WebProcessCreationParameters;
    6868
    69 class WebProcess : ChildProcess {
     69class WebProcess : public ChildProcess {
    7070public:
    7171    static WebProcess& shared();
     
    107107    QNetworkAccessManager* networkAccessManager() { return m_networkAccessManager; }
    108108#endif
    109 
    110     // Will terminate the web process if there are no live pages or downloads.
    111     void terminateIfPossible();
    112109
    113110    bool shouldUseCustomRepresentationForMIMEType(const String& mimeType) const { return m_mimeTypesWithCustomRepresentations.contains(mimeType); }
     
    169166    // ChildProcess
    170167    virtual bool shouldTerminate();
     168    virtual void terminate();
    171169
    172170    // CoreIPC::Connection::Client
Note: See TracChangeset for help on using the changeset viewer.