Changeset 83774 in webkit
- Timestamp:
- Apr 13, 2011 3:24:28 PM (13 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r83772 r83774 1 2011-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 1 92 2011-04-13 Steve Falkenburg <sfalken@apple.com> 2 93 -
trunk/Source/WebKit2/PluginProcess/PluginProcess.cpp
r83767 r83774 168 168 void PluginProcess::getSitesWithData(uint64_t callbackID) 169 169 { 170 disableTermination();170 LocalTerminationDisabler terminationDisabler(*this); 171 171 172 172 Vector<String> sites; … … 175 175 176 176 m_connection->send(Messages::PluginProcessProxy::DidGetSitesWithData(sites, callbackID), 0); 177 178 enableTermination();179 177 } 180 178 181 179 void PluginProcess::clearSiteData(const Vector<String>& sites, uint64_t flags, uint64_t maxAgeInSeconds, uint64_t callbackID) 182 180 { 183 disableTermination();181 LocalTerminationDisabler terminationDisabler(*this); 184 182 185 183 if (NetscapePluginModule* module = netscapePluginModule()) { … … 194 192 195 193 m_connection->send(Messages::PluginProcessProxy::DidClearSiteData(callbackID), 0); 196 197 enableTermination();198 194 } 199 195 -
trunk/Source/WebKit2/Shared/ChildProcess.h
r83767 r83774 41 41 void enableTermination(); 42 42 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 43 60 protected: 44 61 explicit ChildProcess(double terminationTimeout); -
trunk/Source/WebKit2/WebProcess/ApplicationCache/WebApplicationCacheManager.cpp
r82458 r83774 57 57 void WebApplicationCacheManager::getApplicationCacheOrigins(uint64_t callbackID) 58 58 { 59 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 60 59 61 HashSet<RefPtr<SecurityOrigin>, SecurityOriginHash> origins; 60 62 … … 80 82 81 83 WebProcess::shared().connection()->send(Messages::WebApplicationCacheManagerProxy::DidGetApplicationCacheOrigins(identifiers, callbackID), 0); 82 WebProcess::shared().terminateIfPossible();83 84 } 84 85 85 86 void WebApplicationCacheManager::deleteEntriesForOrigin(const SecurityOriginData& originData) 86 87 { 88 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 89 87 90 #if ENABLE(OFFLINE_WEB_APPLICATIONS) 88 91 RefPtr<SecurityOrigin> origin = SecurityOrigin::create(originData.protocol, originData.host, originData.port); … … 92 95 ApplicationCache::deleteCacheForOrigin(origin.get()); 93 96 #endif 94 WebProcess::shared().terminateIfPossible();95 97 } 96 98 97 99 void WebApplicationCacheManager::deleteAllEntries() 98 100 { 101 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 102 99 103 #if ENABLE(OFFLINE_WEB_APPLICATIONS) 100 104 cacheStorage().deleteAllEntries(); 101 105 #endif 102 WebProcess::shared().terminateIfPossible();103 106 } 104 107 -
trunk/Source/WebKit2/WebProcess/Cookies/WebCookieManager.cpp
r82458 r83774 55 55 void WebCookieManager::getHostnamesWithCookies(uint64_t callbackID) 56 56 { 57 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 58 57 59 HashSet<String> hostnames; 58 60 … … 63 65 64 66 WebProcess::shared().connection()->send(Messages::WebCookieManagerProxy::DidGetHostnamesWithCookies(hostnameList, callbackID), 0); 65 WebProcess::shared().terminateIfPossible();66 67 } 67 68 68 69 void WebCookieManager::deleteCookiesForHostname(const String& hostname) 69 70 { 71 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 72 70 73 WebCore::deleteCookiesForHostname(hostname); 71 WebProcess::shared().terminateIfPossible();72 74 } 73 75 74 76 void WebCookieManager::deleteAllCookies() 75 77 { 78 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 79 76 80 WebCore::deleteAllCookies(); 77 WebProcess::shared().terminateIfPossible();78 81 } 79 82 80 83 void WebCookieManager::startObservingCookieChanges() 81 84 { 85 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 86 82 87 WebCore::startObservingCookieChanges(); 83 WebProcess::shared().terminateIfPossible();84 88 } 85 89 … … 96 100 void WebCookieManager::setHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy) 97 101 { 102 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 98 103 platformSetHTTPCookieAcceptPolicy(policy); 99 WebProcess::shared().terminateIfPossible();100 104 } 101 105 102 106 void WebCookieManager::getHTTPCookieAcceptPolicy(uint64_t callbackID) 103 107 { 108 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 104 109 WebProcess::shared().connection()->send(Messages::WebCookieManagerProxy::DidGetHTTPCookieAcceptPolicy(platformGetHTTPCookieAcceptPolicy(), callbackID), 0); 105 WebProcess::shared().terminateIfPossible();106 110 } 107 111 -
trunk/Source/WebKit2/WebProcess/Downloads/Download.cpp
r82364 r83774 53 53 { 54 54 ASSERT(m_downloadID); 55 56 WebProcess::shared().disableTermination(); 55 57 } 56 58 … … 58 60 { 59 61 platformInvalidate(); 62 63 WebProcess::shared().enableTermination(); 60 64 } 61 65 -
trunk/Source/WebKit2/WebProcess/Downloads/DownloadManager.cpp
r79372 r83774 78 78 79 79 delete download; 80 81 WebProcess::shared().terminateIfPossible();82 80 } 83 81 -
trunk/Source/WebKit2/WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp
r82458 r83774 58 58 void WebKeyValueStorageManager::getKeyValueStorageOrigins(uint64_t callbackID) 59 59 { 60 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 61 60 62 Vector<RefPtr<SecurityOrigin> > coreOrigins; 61 63 … … 77 79 78 80 WebProcess::shared().connection()->send(Messages::WebKeyValueStorageManagerProxy::DidGetKeyValueStorageOrigins(identifiers, callbackID), 0); 79 WebProcess::shared().terminateIfPossible();80 81 } 81 82 82 83 void WebKeyValueStorageManager::deleteEntriesForOrigin(const SecurityOriginData& originData) 83 84 { 85 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 86 84 87 RefPtr<SecurityOrigin> origin = SecurityOrigin::create(originData.protocol, originData.host, originData.port); 85 88 if (!origin) … … 87 90 88 91 StorageTracker::tracker().deleteOrigin(origin.get()); 89 WebProcess::shared().terminateIfPossible();90 92 } 91 93 92 94 void WebKeyValueStorageManager::deleteAllEntries() 93 95 { 96 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 94 97 StorageTracker::tracker().deleteAllOrigins(); 95 WebProcess::shared().terminateIfPossible();96 98 } 97 99 -
trunk/Source/WebKit2/WebProcess/MediaCache/WebMediaCacheManager.cpp
r82458 r83774 54 54 void WebMediaCacheManager::getHostnamesWithMediaCache(uint64_t callbackID) 55 55 { 56 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 57 56 58 Vector<String> mediaCacheHostnames; 57 59 … … 61 63 62 64 WebProcess::shared().connection()->send(Messages::WebMediaCacheManagerProxy::DidGetHostnamesWithMediaCache(mediaCacheHostnames, callbackID), 0); 63 WebProcess::shared().terminateIfPossible();64 65 } 65 66 66 67 void WebMediaCacheManager::clearCacheForHostname(const String& hostname) 67 68 { 69 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 70 68 71 #if ENABLE(VIDEO) 69 72 HTMLMediaElement::clearMediaCacheForSite(hostname); 70 73 #endif 71 WebProcess::shared().terminateIfPossible();72 74 } 73 75 74 76 void WebMediaCacheManager::clearCacheForAllHostnames() 75 77 { 78 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 79 76 80 #if ENABLE(VIDEO) 77 81 HTMLMediaElement::clearMediaCache(); 78 82 #endif 79 WebProcess::shared().terminateIfPossible();80 83 } 81 84 -
trunk/Source/WebKit2/WebProcess/ResourceCache/WebResourceCacheManager.cpp
r83054 r83774 64 64 void WebResourceCacheManager::getCacheOrigins(uint64_t callbackID) const 65 65 { 66 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 67 66 68 MemoryCache::SecurityOriginSet origins; 67 69 memoryCache()->getOriginsWithCache(origins); … … 95 97 96 98 WebProcess::shared().connection()->send(Messages::WebResourceCacheManagerProxy::DidGetCacheOrigins(identifiers, callbackID), 0); 97 WebProcess::shared().terminateIfPossible();98 99 } 99 100 100 101 void WebResourceCacheManager::clearCacheForOrigin(SecurityOriginData originData, uint32_t cachesToClear) const 101 102 { 103 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 104 102 105 #if USE(CFURLCACHE) 103 106 ResourceCachesToClear resourceCachesToClear = static_cast<ResourceCachesToClear>(cachesToClear); … … 121 124 } 122 125 #endif 123 WebProcess::shared().terminateIfPossible();124 126 } 125 127 126 128 void WebResourceCacheManager::clearCacheForAllOrigins(uint32_t cachesToClear) const 127 129 { 130 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 131 128 132 ResourceCachesToClear resourceCachesToClear = static_cast<ResourceCachesToClear>(cachesToClear); 129 133 130 134 WebProcess::shared().clearResourceCaches(resourceCachesToClear); 131 WebProcess::shared().terminateIfPossible();132 135 } 133 136 -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.cpp
r82458 r83774 68 68 void WebDatabaseManager::getDatabasesByOrigin(uint64_t callbackID) const 69 69 { 70 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 71 70 72 // FIXME: This could be made more efficient by adding a function to DatabaseTracker 71 73 // to get both the origins and the Vector of DatabaseDetails for each origin in one … … 106 108 107 109 WebProcess::shared().connection()->send(Messages::WebDatabaseManagerProxy::DidGetDatabasesByOrigin(originAndDatabasesVector, callbackID), 0); 108 WebProcess::shared().terminateIfPossible();109 110 } 110 111 111 112 void WebDatabaseManager::getDatabaseOrigins(uint64_t callbackID) const 112 113 { 114 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 115 113 116 Vector<RefPtr<SecurityOrigin> > origins; 114 117 DatabaseTracker::tracker().origins(origins); … … 120 123 identifiers[i] = origins[i]->databaseIdentifier(); 121 124 WebProcess::shared().connection()->send(Messages::WebDatabaseManagerProxy::DidGetDatabaseOrigins(identifiers, callbackID), 0); 122 WebProcess::shared().terminateIfPossible();123 125 } 124 126 125 127 void WebDatabaseManager::deleteDatabaseWithNameForOrigin(const String& databaseIdentifier, const String& originIdentifier) const 126 128 { 129 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 130 127 131 RefPtr<SecurityOrigin> origin = SecurityOrigin::createFromDatabaseIdentifier(originIdentifier); 128 132 if (!origin) … … 130 134 131 135 DatabaseTracker::tracker().deleteDatabase(origin.get(), databaseIdentifier); 132 WebProcess::shared().terminateIfPossible();133 136 } 134 137 135 138 void WebDatabaseManager::deleteDatabasesForOrigin(const String& originIdentifier) const 136 139 { 140 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 141 137 142 RefPtr<SecurityOrigin> origin = SecurityOrigin::createFromDatabaseIdentifier(originIdentifier); 138 143 if (!origin) … … 140 145 141 146 DatabaseTracker::tracker().deleteOrigin(origin.get()); 142 WebProcess::shared().terminateIfPossible();143 147 } 144 148 145 149 void WebDatabaseManager::deleteAllDatabases() const 146 150 { 151 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 152 147 153 DatabaseTracker::tracker().deleteAllDatabases(); 148 WebProcess::shared().terminateIfPossible();149 154 } 150 155 151 156 void WebDatabaseManager::setQuotaForOrigin(const String& originIdentifier, unsigned long long quota) const 152 157 { 158 WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); 159 153 160 // If the quota is set to a value lower than the current usage, that quota will 154 161 // "stick" but no data will be purged to meet the new quota. This will simply … … 160 167 161 168 DatabaseTracker::tracker().setQuota(origin.get(), quota); 162 WebProcess::shared().terminateIfPossible();163 169 } 164 170 -
trunk/Source/WebKit2/WebProcess/WebProcess.cpp
r83767 r83774 491 491 ASSERT(!result.first->second); 492 492 result.first->second = WebPage::create(pageID, parameters); 493 494 // Balanced by an enableTermination in removeWebPage. 495 disableTermination(); 493 496 } 494 497 … … 498 501 void WebProcess::removeWebPage(uint64_t pageID) 499 502 { 503 ASSERT(m_pageMap.contains(pageID)); 504 500 505 m_pageMap.remove(pageID); 501 terminateIfPossible(); 506 507 enableTermination(); 502 508 } 503 509 … … 508 514 } 509 515 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 516 bool WebProcess::shouldTerminate() 517 { 521 518 // Keep running forever if we're running in the same process. 522 519 if (!isSeparateProcess()) 523 return; 520 return false; 521 522 ASSERT(m_pageMap.isEmpty()); 523 ASSERT(!DownloadManager::shared().isDownloading()); 524 524 525 525 // FIXME: the ShouldTerminate message should also send termination parameters, such as any session cookies that need to be preserved. … … 527 527 if (m_connection->sendSync(Messages::WebProcessProxy::ShouldTerminate(), Messages::WebProcessProxy::ShouldTerminate::Reply(shouldTerminate), 0) 528 528 && !shouldTerminate) 529 return; 530 531 // Actually terminate the process. 532 529 return false; 530 531 return true; 532 } 533 534 void WebProcess::terminate() 535 { 533 536 #ifndef NDEBUG 534 537 gcController().garbageCollectNow(); … … 542 545 platformTerminate(); 543 546 m_runLoop->stop(); 544 }545 546 bool WebProcess::shouldTerminate()547 {548 // FIXME: Implement.549 ASSERT_NOT_REACHED();550 return false;551 547 } 552 548 … … 737 733 void WebProcess::getSitesWithPluginData(const Vector<String>& pluginPaths, uint64_t callbackID) 738 734 { 735 LocalTerminationDisabler terminationDisabler(*this); 736 739 737 HashSet<String> sitesSet; 740 738 … … 753 751 754 752 m_connection->send(Messages::WebContext::DidGetSitesWithPluginData(sites, callbackID), 0); 755 terminateIfPossible();756 753 } 757 754 758 755 void WebProcess::clearPluginSiteData(const Vector<String>& pluginPaths, const Vector<String>& sites, uint64_t flags, uint64_t maxAgeInSeconds, uint64_t callbackID) 759 756 { 757 LocalTerminationDisabler terminationDisabler(*this); 758 760 759 for (size_t i = 0; i < pluginPaths.size(); ++i) { 761 760 RefPtr<NetscapePluginModule> netscapePluginModule = NetscapePluginModule::getOrCreate(pluginPaths[i]); … … 774 773 775 774 m_connection->send(Messages::WebContext::DidClearPluginSiteData(callbackID), 0); 776 terminateIfPossible();777 775 } 778 776 #endif -
trunk/Source/WebKit2/WebProcess/WebProcess.h
r83767 r83774 67 67 struct WebProcessCreationParameters; 68 68 69 class WebProcess : ChildProcess {69 class WebProcess : public ChildProcess { 70 70 public: 71 71 static WebProcess& shared(); … … 107 107 QNetworkAccessManager* networkAccessManager() { return m_networkAccessManager; } 108 108 #endif 109 110 // Will terminate the web process if there are no live pages or downloads.111 void terminateIfPossible();112 109 113 110 bool shouldUseCustomRepresentationForMIMEType(const String& mimeType) const { return m_mimeTypesWithCustomRepresentations.contains(mimeType); } … … 169 166 // ChildProcess 170 167 virtual bool shouldTerminate(); 168 virtual void terminate(); 171 169 172 170 // CoreIPC::Connection::Client
Note: See TracChangeset
for help on using the changeset viewer.