Changeset 225926 in webkit
- Timestamp:
- Dec 14, 2017, 2:08:53 PM (7 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 43 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r225925 r225926 1 2017-12-14 Alex Christensen <achristensen@webkit.org> 2 3 Use move semantics for SandboxExtension::Handle 4 https://bugs.webkit.org/show_bug.cgi?id=180792 5 6 Reviewed by Andy Estes. 7 8 Passing them around as const SandboxExtension::Handle& is wrong because ownership is transferred and they are consumed. 9 It only works now because their contents are mutable, which isn't a good use of mutable. 10 11 * NetworkProcess/Downloads/Download.cpp: 12 (WebKit::Download::decideDestinationWithSuggestedFilename): 13 (WebKit::Download::didDecideDownloadDestination): 14 * NetworkProcess/Downloads/Download.h: 15 * NetworkProcess/Downloads/DownloadManager.cpp: 16 (WebKit::DownloadManager::continueDecidePendingDownloadDestination): 17 (WebKit::DownloadManager::resumeDownload): 18 * NetworkProcess/Downloads/DownloadManager.h: 19 * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm: 20 (WebKit::Download::resume): 21 * NetworkProcess/Downloads/ios/DownloadIOS.mm: 22 (WebKit::Download::resume): 23 * NetworkProcess/Downloads/mac/DownloadMac.mm: 24 (WebKit::Download::resume): 25 * NetworkProcess/NetworkConnectionToWebProcess.cpp: 26 (WebKit::NetworkConnectionToWebProcess::registerFileBlobURL): 27 (WebKit::NetworkConnectionToWebProcess::preregisterSandboxExtensionsForOptionallyFileBackedBlob): 28 * NetworkProcess/NetworkConnectionToWebProcess.h: 29 * NetworkProcess/NetworkDataTask.h: 30 (WebKit::NetworkDataTask::setPendingDownloadLocation): 31 * NetworkProcess/NetworkDataTaskBlob.cpp: 32 (WebKit::NetworkDataTaskBlob::setPendingDownloadLocation): 33 * NetworkProcess/NetworkDataTaskBlob.h: 34 * NetworkProcess/NetworkProcess.cpp: 35 (WebKit::NetworkProcess::resumeDownload): 36 (WebKit::NetworkProcess::continueDecidePendingDownloadDestination): 37 * NetworkProcess/NetworkProcess.h: 38 * NetworkProcess/NetworkResourceLoadParameters.cpp: 39 (WebKit::NetworkResourceLoadParameters::decode): 40 * NetworkProcess/cocoa/NetworkDataTaskCocoa.h: 41 * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: 42 (WebKit::NetworkDataTaskCocoa::setPendingDownloadLocation): 43 * Shared/SandboxExtension.h: 44 (WebKit::SandboxExtension::create): 45 * Shared/WebMemorySampler.cpp: 46 (WebKit::WebMemorySampler::start): 47 (WebKit::WebMemorySampler::initializeSandboxedLogFile): 48 * Shared/WebMemorySampler.h: 49 * Shared/mac/SandboxExtensionMac.mm: 50 (WebKit::SandboxExtension::create): 51 * StorageProcess/StorageProcess.cpp: 52 (WebKit::StorageProcess::grantSandboxExtensionsForBlobs): 53 * StorageProcess/StorageProcess.h: 54 * UIProcess/Cocoa/WebViewImpl.mm: 55 (WebKit::WebViewImpl::performDragOperation): 56 * UIProcess/WebPageProxy.cpp: 57 (WebKit::WebPageProxy::dragEntered): 58 (WebKit::WebPageProxy::dragUpdated): 59 (WebKit::WebPageProxy::dragExited): 60 (WebKit::WebPageProxy::performDragOperation): 61 (WebKit::WebPageProxy::performDragControllerAction): 62 * UIProcess/WebPageProxy.h: 63 * WebProcess/InjectedBundle/InjectedBundle.cpp: 64 (WebKit::InjectedBundle::create): 65 * WebProcess/InjectedBundle/InjectedBundle.h: 66 * WebProcess/MediaStream/MediaDeviceSandboxExtensions.cpp: 67 (WebKit::MediaDeviceSandboxExtensions::operator[]): 68 (WebKit::MediaDeviceSandboxExtensions::operator[] const): Deleted. 69 * WebProcess/MediaStream/MediaDeviceSandboxExtensions.h: 70 * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp: 71 (WebKit::UserMediaPermissionRequestManager::grantUserMediaDeviceSandboxExtensions): 72 * WebProcess/MediaStream/UserMediaPermissionRequestManager.h: 73 * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: 74 (WebKit::WebPlatformStrategies::getPathnamesForType): 75 * WebProcess/WebPage/WebBackForwardListProxy.cpp: 76 (WebKit::WebBackForwardListProxy::goToItem): 77 * WebProcess/WebPage/WebPage.cpp: 78 (WebKit::WebPage::loadRequest): 79 (WebKit::WebPage::reload): 80 (WebKit::WebPage::performDragControllerAction): 81 (WebKit::WebPage::grantUserMediaDeviceSandboxExtensions): 82 (WebKit::WebPage::SandboxExtensionTracker::beginLoad): 83 * WebProcess/WebPage/WebPage.h: 84 * WebProcess/WebProcess.cpp: 85 (WebKit::WebProcess::startMemorySampler): 86 * WebProcess/WebProcess.h: 87 1 88 2017-12-14 Alex Christensen <achristensen@webkit.org> 2 89 -
trunk/Source/WebKit/NetworkProcess/Downloads/Download.cpp
r224299 r225926 211 211 return String(); 212 212 213 m_sandboxExtension = SandboxExtension::create( sandboxExtensionHandle);213 m_sandboxExtension = SandboxExtension::create(WTFMove(sandboxExtensionHandle)); 214 214 if (m_sandboxExtension) 215 215 m_sandboxExtension->consume(); … … 223 223 } 224 224 225 void Download::didDecideDownloadDestination(const String& destinationPath, const SandboxExtension::Handle& sandboxExtensionHandle, bool allowOverwrite)225 void Download::didDecideDownloadDestination(const String& destinationPath, SandboxExtension::Handle&& sandboxExtensionHandle, bool allowOverwrite) 226 226 { 227 227 ASSERT(!m_sandboxExtension); 228 m_sandboxExtension = SandboxExtension::create( sandboxExtensionHandle);228 m_sandboxExtension = SandboxExtension::create(WTFMove(sandboxExtensionHandle)); 229 229 if (m_sandboxExtension) 230 230 m_sandboxExtension->consume(); -
trunk/Source/WebKit/NetworkProcess/Downloads/Download.h
r224846 r225926 91 91 void startWithHandle(WebCore::ResourceHandle*, const WebCore::ResourceResponse&); 92 92 #endif 93 void resume(const IPC::DataReference& resumeData, const String& path, const SandboxExtension::Handle&);93 void resume(const IPC::DataReference& resumeData, const String& path, SandboxExtension::Handle&&); 94 94 void cancel(); 95 95 … … 109 109 String decideDestinationWithSuggestedFilename(const String& filename, bool& allowOverwrite); 110 110 void decideDestinationWithSuggestedFilenameAsync(const String&); 111 void didDecideDownloadDestination(const String& destinationPath, const SandboxExtension::Handle&, bool allowOverwrite);111 void didDecideDownloadDestination(const String& destinationPath, SandboxExtension::Handle&&, bool allowOverwrite); 112 112 void continueDidReceiveResponse(); 113 113 void platformDidFinish(); -
trunk/Source/WebKit/NetworkProcess/Downloads/DownloadManager.cpp
r223730 r225926 123 123 } 124 124 125 void DownloadManager::continueDecidePendingDownloadDestination(DownloadID downloadID, String destination, const SandboxExtension::Handle& sandboxExtensionHandle, bool allowOverwrite)125 void DownloadManager::continueDecidePendingDownloadDestination(DownloadID downloadID, String destination, SandboxExtension::Handle&& sandboxExtensionHandle, bool allowOverwrite) 126 126 { 127 127 #if USE(NETWORK_SESSION) … … 134 134 ASSERT(m_pendingDownloads.contains(downloadID)); 135 135 136 networkDataTask->setPendingDownloadLocation(destination, sandboxExtensionHandle, allowOverwrite);136 networkDataTask->setPendingDownloadLocation(destination, WTFMove(sandboxExtensionHandle), allowOverwrite); 137 137 completionHandler(PolicyAction::Download); 138 138 if (networkDataTask->state() == NetworkDataTask::State::Canceling || networkDataTask->state() == NetworkDataTask::State::Completed) … … 149 149 #else 150 150 if (auto* waitingDownload = download(downloadID)) 151 waitingDownload->didDecideDownloadDestination(destination, sandboxExtensionHandle, allowOverwrite);152 #endif 153 } 154 155 void DownloadManager::resumeDownload(PAL::SessionID sessionID, DownloadID downloadID, const IPC::DataReference& resumeData, const String& path, const SandboxExtension::Handle& sandboxExtensionHandle)151 waitingDownload->didDecideDownloadDestination(destination, WTFMove(sandboxExtensionHandle), allowOverwrite); 152 #endif 153 } 154 155 void DownloadManager::resumeDownload(PAL::SessionID sessionID, DownloadID downloadID, const IPC::DataReference& resumeData, const String& path, SandboxExtension::Handle&& sandboxExtensionHandle) 156 156 { 157 157 #if USE(NETWORK_SESSION) && !PLATFORM(COCOA) … … 165 165 #endif 166 166 167 download->resume(resumeData, path, sandboxExtensionHandle);167 download->resume(resumeData, path, WTFMove(sandboxExtensionHandle)); 168 168 ASSERT(!m_downloads.contains(downloadID)); 169 169 m_downloads.add(downloadID, WTFMove(download)); -
trunk/Source/WebKit/NetworkProcess/Downloads/DownloadManager.h
r223730 r225926 85 85 #endif 86 86 void convertNetworkLoadToDownload(DownloadID, std::unique_ptr<NetworkLoad>&&, Vector<RefPtr<WebCore::BlobDataFileReference>>&&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&); 87 void continueDecidePendingDownloadDestination(DownloadID, String destination, const SandboxExtension::Handle&, bool allowOverwrite);87 void continueDecidePendingDownloadDestination(DownloadID, String destination, SandboxExtension::Handle&&, bool allowOverwrite); 88 88 89 void resumeDownload(PAL::SessionID, DownloadID, const IPC::DataReference& resumeData, const String& path, const SandboxExtension::Handle&);89 void resumeDownload(PAL::SessionID, DownloadID, const IPC::DataReference& resumeData, const String& path, SandboxExtension::Handle&&); 90 90 91 91 void cancelDownload(DownloadID); -
trunk/Source/WebKit/NetworkProcess/Downloads/cocoa/DownloadCocoa.mm
r223431 r225926 36 36 namespace WebKit { 37 37 38 void Download::resume(const IPC::DataReference& resumeData, const String& path, const SandboxExtension::Handle& sandboxExtensionHandle)38 void Download::resume(const IPC::DataReference& resumeData, const String& path, SandboxExtension::Handle&& sandboxExtensionHandle) 39 39 { 40 m_sandboxExtension = SandboxExtension::create( sandboxExtensionHandle);40 m_sandboxExtension = SandboxExtension::create(WTFMove(sandboxExtensionHandle)); 41 41 if (m_sandboxExtension) 42 42 m_sandboxExtension->consume(); -
trunk/Source/WebKit/NetworkProcess/Downloads/ios/DownloadIOS.mm
r208388 r225926 128 128 } 129 129 130 void Download::resume(const IPC::DataReference&, const String&, const SandboxExtension::Handle&)130 void Download::resume(const IPC::DataReference&, const String&, SandboxExtension::Handle&&) 131 131 { 132 132 notImplemented(); -
trunk/Source/WebKit/NetworkProcess/Downloads/mac/DownloadMac.mm
r224828 r225926 84 84 } 85 85 86 void Download::resume(const IPC::DataReference& resumeData, const String& path, const SandboxExtension::Handle& sandboxExtensionHandle)86 void Download::resume(const IPC::DataReference& resumeData, const String& path, SandboxExtension::Handle&& sandboxExtensionHandle) 87 87 { 88 88 ASSERT(!m_nsURLDownload); 89 89 ASSERT(!m_delegate); 90 90 91 m_sandboxExtension = SandboxExtension::create( sandboxExtensionHandle);91 m_sandboxExtension = SandboxExtension::create(WTFMove(sandboxExtensionHandle)); 92 92 if (m_sandboxExtension) 93 93 m_sandboxExtension->consume(); -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp
r224791 r225926 378 378 } 379 379 380 void NetworkConnectionToWebProcess::registerFileBlobURL(const URL& url, const String& path, const SandboxExtension::Handle& extensionHandle, const String& contentType)381 { 382 RefPtr<SandboxExtension> extension = SandboxExtension::create( extensionHandle);380 void NetworkConnectionToWebProcess::registerFileBlobURL(const URL& url, const String& path, SandboxExtension::Handle&& extensionHandle, const String& contentType) 381 { 382 RefPtr<SandboxExtension> extension = SandboxExtension::create(WTFMove(extensionHandle)); 383 383 384 384 NetworkBlobRegistry::singleton().registerFileBlobURL(this, url, path, WTFMove(extension), contentType); … … 395 395 } 396 396 397 void NetworkConnectionToWebProcess::preregisterSandboxExtensionsForOptionallyFileBackedBlob(const Vector<String>& filePaths, const SandboxExtension::HandleArray& handles)397 void NetworkConnectionToWebProcess::preregisterSandboxExtensionsForOptionallyFileBackedBlob(const Vector<String>& filePaths, SandboxExtension::HandleArray&& handles) 398 398 { 399 399 #if ENABLE(SANDBOX_EXTENSIONS) … … 401 401 402 402 for (size_t i = 0; i < filePaths.size(); ++i) 403 m_blobDataFileReferences.add(filePaths[i], BlobDataFileReferenceWithSandboxExtension::create(filePaths[i], SandboxExtension::create( handles[i])));403 m_blobDataFileReferences.add(filePaths[i], BlobDataFileReferenceWithSandboxExtension::create(filePaths[i], SandboxExtension::create(WTFMove(handles[i])))); 404 404 #else 405 405 for (size_t i = 0; i < filePaths.size(); ++i) -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h
r223179 r225926 109 109 void deleteCookie(PAL::SessionID, const WebCore::URL&, const String& cookieName); 110 110 111 void registerFileBlobURL(const WebCore::URL&, const String& path, const SandboxExtension::Handle&, const String& contentType);111 void registerFileBlobURL(const WebCore::URL&, const String& path, SandboxExtension::Handle&&, const String& contentType); 112 112 void registerBlobURL(const WebCore::URL&, Vector<WebCore::BlobPart>&&, const String& contentType); 113 113 void registerBlobURLFromURL(const WebCore::URL&, const WebCore::URL& srcURL); 114 void preregisterSandboxExtensionsForOptionallyFileBackedBlob(const Vector<String>& fileBackedPath, const SandboxExtension::HandleArray&);114 void preregisterSandboxExtensionsForOptionallyFileBackedBlob(const Vector<String>& fileBackedPath, SandboxExtension::HandleArray&&); 115 115 void registerBlobURLOptionallyFileBacked(const WebCore::URL&, const WebCore::URL& srcURL, const String& fileBackedPath, const String& contentType); 116 116 void registerBlobURLForSlice(const WebCore::URL&, const WebCore::URL& srcURL, int64_t start, int64_t end); -
trunk/Source/WebKit/NetworkProcess/NetworkDataTask.h
r224373 r225926 120 120 } 121 121 122 virtual void setPendingDownloadLocation(const String& filename, const SandboxExtension::Handle&, bool /*allowOverwrite*/) { m_pendingDownloadLocation = filename; }122 virtual void setPendingDownloadLocation(const String& filename, SandboxExtension::Handle&&, bool /*allowOverwrite*/) { m_pendingDownloadLocation = filename; } 123 123 const String& pendingDownloadLocation() const { return m_pendingDownloadLocation; } 124 124 bool isDownload() const { return !!m_pendingDownloadID.downloadID(); } -
trunk/Source/WebKit/NetworkProcess/NetworkDataTaskBlob.cpp
r224635 r225926 440 440 } 441 441 442 void NetworkDataTaskBlob::setPendingDownloadLocation(const String& filename, const SandboxExtension::Handle& sandboxExtensionHandle, bool allowOverwrite)443 { 444 NetworkDataTask::setPendingDownloadLocation(filename, sandboxExtensionHandle, allowOverwrite);442 void NetworkDataTaskBlob::setPendingDownloadLocation(const String& filename, SandboxExtension::Handle&& sandboxExtensionHandle, bool allowOverwrite) 443 { 444 NetworkDataTask::setPendingDownloadLocation(filename, { }, allowOverwrite); 445 445 446 446 ASSERT(!m_sandboxExtension); 447 m_sandboxExtension = SandboxExtension::create( sandboxExtensionHandle);447 m_sandboxExtension = SandboxExtension::create(WTFMove(sandboxExtensionHandle)); 448 448 if (m_sandboxExtension) 449 449 m_sandboxExtension->consume(); -
trunk/Source/WebKit/NetworkProcess/NetworkDataTaskBlob.h
r224371 r225926 65 65 NetworkDataTask::State state() const override { return m_state; } 66 66 67 void setPendingDownloadLocation(const String&, const SandboxExtension::Handle&, bool /*allowOverwrite*/) override;67 void setPendingDownloadLocation(const String&, SandboxExtension::Handle&&, bool /*allowOverwrite*/) override; 68 68 String suggestedFilename() const override; 69 69 -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r225827 r225926 519 519 } 520 520 521 void NetworkProcess::resumeDownload(PAL::SessionID sessionID, DownloadID downloadID, const IPC::DataReference& resumeData, const String& path, const WebKit::SandboxExtension::Handle& sandboxExtensionHandle)522 { 523 downloadManager().resumeDownload(sessionID, downloadID, resumeData, path, sandboxExtensionHandle);521 void NetworkProcess::resumeDownload(PAL::SessionID sessionID, DownloadID downloadID, const IPC::DataReference& resumeData, const String& path, WebKit::SandboxExtension::Handle&& sandboxExtensionHandle) 522 { 523 downloadManager().resumeDownload(sessionID, downloadID, resumeData, path, WTFMove(sandboxExtensionHandle)); 524 524 } 525 525 … … 595 595 #endif 596 596 597 void NetworkProcess::continueDecidePendingDownloadDestination(DownloadID downloadID, String destination, const SandboxExtension::Handle& sandboxExtensionHandle, bool allowOverwrite)597 void NetworkProcess::continueDecidePendingDownloadDestination(DownloadID downloadID, String destination, SandboxExtension::Handle&& sandboxExtensionHandle, bool allowOverwrite) 598 598 { 599 599 if (destination.isEmpty()) 600 600 downloadManager().cancelDownload(downloadID); 601 601 else 602 downloadManager().continueDecidePendingDownloadDestination(downloadID, destination, sandboxExtensionHandle, allowOverwrite);602 downloadManager().continueDecidePendingDownloadDestination(downloadID, destination, WTFMove(sandboxExtensionHandle), allowOverwrite); 603 603 } 604 604 -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.h
r225827 r225926 201 201 202 202 void downloadRequest(PAL::SessionID, DownloadID, const WebCore::ResourceRequest&, const String& suggestedFilename); 203 void resumeDownload(PAL::SessionID, DownloadID, const IPC::DataReference& resumeData, const String& path, const SandboxExtension::Handle&);203 void resumeDownload(PAL::SessionID, DownloadID, const IPC::DataReference& resumeData, const String& path, SandboxExtension::Handle&&); 204 204 void cancelDownload(DownloadID); 205 205 #if USE(PROTECTION_SPACE_AUTH_CALLBACK) … … 209 209 void continueWillSendRequest(DownloadID, WebCore::ResourceRequest&&); 210 210 #endif 211 void continueDecidePendingDownloadDestination(DownloadID, String destination, const SandboxExtension::Handle& sandboxExtensionHandle, bool allowOverwrite);211 void continueDecidePendingDownloadDestination(DownloadID, String destination, SandboxExtension::Handle&&, bool allowOverwrite); 212 212 213 213 void setCacheModel(uint32_t); -
trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp
r225826 r225926 129 129 return false; 130 130 for (size_t i = 0; i < requestBodySandboxExtensionHandles.size(); ++i) { 131 if (auto extension = SandboxExtension::create( requestBodySandboxExtensionHandles[i]))131 if (auto extension = SandboxExtension::create(WTFMove(requestBodySandboxExtensionHandles[i]))) 132 132 result.requestBodySandboxExtensions.append(WTFMove(extension)); 133 133 } -
trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h
r225827 r225926 65 65 NetworkDataTask::State state() const override; 66 66 67 void setPendingDownloadLocation(const String&, const SandboxExtension::Handle&, bool /*allowOverwrite*/) override;67 void setPendingDownloadLocation(const String&, SandboxExtension::Handle&&, bool /*allowOverwrite*/) override; 68 68 String suggestedFilename() const override; 69 69 -
trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm
r225827 r225926 294 294 } 295 295 296 void NetworkDataTaskCocoa::setPendingDownloadLocation(const WTF::String& filename, const SandboxExtension::Handle& sandboxExtensionHandle, bool allowOverwrite)297 { 298 NetworkDataTask::setPendingDownloadLocation(filename, sandboxExtensionHandle, allowOverwrite);296 void NetworkDataTaskCocoa::setPendingDownloadLocation(const WTF::String& filename, SandboxExtension::Handle&& sandboxExtensionHandle, bool allowOverwrite) 297 { 298 NetworkDataTask::setPendingDownloadLocation(filename, { }, allowOverwrite); 299 299 300 300 ASSERT(!m_sandboxExtension); 301 m_sandboxExtension = SandboxExtension::create( sandboxExtensionHandle);301 m_sandboxExtension = SandboxExtension::create(WTFMove(sandboxExtensionHandle)); 302 302 if (m_sandboxExtension) 303 303 m_sandboxExtension->consume(); -
trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp
r224299 r225926 96 96 } 97 97 98 void NetworkDataTaskSoup::setPendingDownloadLocation(const String& filename, const SandboxExtension::Handle& sandboxExtensionHandle, bool allowOverwrite)99 { 100 NetworkDataTask::setPendingDownloadLocation(filename, sandboxExtensionHandle, allowOverwrite);98 void NetworkDataTaskSoup::setPendingDownloadLocation(const String& filename, SandboxExtension::Handle&& sandboxExtensionHandle, bool allowOverwrite) 99 { 100 NetworkDataTask::setPendingDownloadLocation(filename, WTFMove(sandboxExtensionHandle), allowOverwrite); 101 101 m_allowOverwriteDownload = allowOverwrite; 102 102 } -
trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.h
r224299 r225926 53 53 NetworkDataTask::State state() const override; 54 54 55 void setPendingDownloadLocation(const String&, const SandboxExtension::Handle&, bool /*allowOverwrite*/) override;55 void setPendingDownloadLocation(const String&, SandboxExtension::Handle&&, bool /*allowOverwrite*/) override; 56 56 String suggestedFilename() const override; 57 57 -
trunk/Source/WebKit/Shared/SandboxExtension.h
r225826 r225926 94 94 }; 95 95 96 static RefPtr<SandboxExtension> create( const Handle&);96 static RefPtr<SandboxExtension> create(Handle&&); 97 97 static bool createHandle(const String& path, Type, Handle&); 98 98 static bool createHandleWithoutResolvingPath(const String& path, Type, Handle&); … … 130 130 inline void SandboxExtension::HandleArray::encode(IPC::Encoder&) const { } 131 131 inline bool SandboxExtension::HandleArray::decode(IPC::Decoder&, HandleArray&) { return true; } 132 inline RefPtr<SandboxExtension> SandboxExtension::create( const Handle&) { return nullptr; }132 inline RefPtr<SandboxExtension> SandboxExtension::create(Handle&&) { return nullptr; } 133 133 inline bool SandboxExtension::createHandle(const String&, Type, Handle&) { return true; } 134 134 inline bool SandboxExtension::createHandleWithoutResolvingPath(const String&, Type, Handle&) { return true; } -
trunk/Source/WebKit/Shared/WebMemorySampler.cpp
r224635 r225926 71 71 } 72 72 73 void WebMemorySampler::start( const SandboxExtension::Handle& sampleLogFileHandle, const String& sampleLogFilePath, const double interval)73 void WebMemorySampler::start(SandboxExtension::Handle&& sampleLogFileHandle, const String& sampleLogFilePath, const double interval) 74 74 { 75 75 if (m_isRunning) … … 82 82 } 83 83 84 initializeSandboxedLogFile( sampleLogFileHandle, sampleLogFilePath);84 initializeSandboxedLogFile(WTFMove(sampleLogFileHandle), sampleLogFilePath); 85 85 initializeTimers(interval); 86 86 … … 132 132 } 133 133 134 void WebMemorySampler::initializeSandboxedLogFile( const SandboxExtension::Handle& sampleLogSandboxHandle, const String& sampleLogFilePath)134 void WebMemorySampler::initializeSandboxedLogFile(SandboxExtension::Handle&& sampleLogSandboxHandle, const String& sampleLogFilePath) 135 135 { 136 m_sampleLogSandboxExtension = SandboxExtension::create( sampleLogSandboxHandle);136 m_sampleLogSandboxExtension = SandboxExtension::create(WTFMove(sampleLogSandboxHandle)); 137 137 if (m_sampleLogSandboxExtension) 138 138 m_sampleLogSandboxExtension->consume(); -
trunk/Source/WebKit/Shared/WebMemorySampler.h
r224371 r225926 74 74 static WebMemorySampler* singleton(); 75 75 void start(const double interval = 0); 76 void start( const SandboxExtension::Handle&, const String&, const double interval = 0);76 void start(SandboxExtension::Handle&&, const String&, const double interval = 0); 77 77 void stop(); 78 78 bool isRunning() const; … … 83 83 84 84 void initializeTempLogFile(); 85 void initializeSandboxedLogFile( const SandboxExtension::Handle&, const String&);85 void initializeSandboxedLogFile(SandboxExtension::Handle&&, const String&); 86 86 void writeHeaders(); 87 87 void initializeTimers(double); -
trunk/Source/WebKit/Shared/mac/SandboxExtensionMac.mm
r225826 r225926 210 210 } 211 211 212 RefPtr<SandboxExtension> SandboxExtension::create( const Handle& handle)212 RefPtr<SandboxExtension> SandboxExtension::create(Handle&& handle) 213 213 { 214 214 if (!handle.m_sandboxExtension) -
trunk/Source/WebKit/StorageProcess/StorageProcess.cpp
r225914 r225926 333 333 334 334 #if ENABLE(SANDBOX_EXTENSIONS) 335 void StorageProcess::grantSandboxExtensionsForBlobs(const Vector<String>& paths, const SandboxExtension::HandleArray& handles)335 void StorageProcess::grantSandboxExtensionsForBlobs(const Vector<String>& paths, SandboxExtension::HandleArray&& handles) 336 336 { 337 337 ASSERT(paths.size() == handles.size()); 338 338 339 339 for (size_t i = 0; i < paths.size(); ++i) { 340 auto result = m_blobTemporaryFileSandboxExtensions.add(paths[i], SandboxExtension::create( handles[i]));340 auto result = m_blobTemporaryFileSandboxExtensions.add(paths[i], SandboxExtension::create(WTFMove(handles[i]))); 341 341 ASSERT_UNUSED(result, result.isNewEntry); 342 342 } -
trunk/Source/WebKit/StorageProcess/StorageProcess.h
r225877 r225926 125 125 void deleteWebsiteDataForOrigins(PAL::SessionID, OptionSet<WebsiteDataType> websiteDataTypes, const Vector<WebCore::SecurityOriginData>& origins, uint64_t callbackID); 126 126 #if ENABLE(SANDBOX_EXTENSIONS) 127 void grantSandboxExtensionsForBlobs(const Vector<String>& paths, const SandboxExtension::HandleArray&);127 void grantSandboxExtensionsForBlobs(const Vector<String>& paths, SandboxExtension::HandleArray&&); 128 128 void didGetSandboxExtensionsForBlobFiles(uint64_t requestID, SandboxExtension::HandleArray&&); 129 129 #endif -
trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm
r225369 r225926 3737 3737 m_page->createSandboxExtensionsIfNeeded(*fileNames, sandboxExtensionHandle, sandboxExtensionForUpload); 3738 3738 dragData->setFileNames(*fileNames); 3739 m_page->performDragOperation(*dragData, pasteboardName, sandboxExtensionHandle, sandboxExtensionForUpload);3739 m_page->performDragOperation(*dragData, pasteboardName, WTFMove(sandboxExtensionHandle), WTFMove(sandboxExtensionForUpload)); 3740 3740 delete dragData; 3741 3741 delete fileNames; … … 3749 3749 #endif 3750 3750 3751 m_page->performDragOperation(*dragData, draggingInfo.draggingPasteboard.name, sandboxExtensionHandle, sandboxExtensionForUpload);3751 m_page->performDragOperation(*dragData, draggingInfo.draggingPasteboard.name, WTFMove(sandboxExtensionHandle), WTFMove(sandboxExtensionForUpload)); 3752 3752 delete dragData; 3753 3753 -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r225827 r225926 1730 1730 void WebPageProxy::dragEntered(DragData& dragData, const String& dragStorageName) 1731 1731 { 1732 SandboxExtension::Handle sandboxExtensionHandle; 1733 SandboxExtension::HandleArray sandboxExtensionHandleEmptyArray; 1734 performDragControllerAction(DragControllerAction::Entered, dragData, dragStorageName, sandboxExtensionHandle, sandboxExtensionHandleEmptyArray); 1732 performDragControllerAction(DragControllerAction::Entered, dragData, dragStorageName, { }, { }); 1735 1733 } 1736 1734 1737 1735 void WebPageProxy::dragUpdated(DragData& dragData, const String& dragStorageName) 1738 1736 { 1739 SandboxExtension::Handle sandboxExtensionHandle; 1740 SandboxExtension::HandleArray sandboxExtensionHandleEmptyArray; 1741 performDragControllerAction(DragControllerAction::Updated, dragData, dragStorageName, sandboxExtensionHandle, sandboxExtensionHandleEmptyArray); 1737 performDragControllerAction(DragControllerAction::Updated, dragData, dragStorageName, { }, { }); 1742 1738 } 1743 1739 1744 1740 void WebPageProxy::dragExited(DragData& dragData, const String& dragStorageName) 1745 1741 { 1746 SandboxExtension::Handle sandboxExtensionHandle; 1747 SandboxExtension::HandleArray sandboxExtensionHandleEmptyArray; 1748 performDragControllerAction(DragControllerAction::Exited, dragData, dragStorageName, sandboxExtensionHandle, sandboxExtensionHandleEmptyArray); 1749 } 1750 1751 void WebPageProxy::performDragOperation(DragData& dragData, const String& dragStorageName, const SandboxExtension::Handle& sandboxExtensionHandle, const SandboxExtension::HandleArray& sandboxExtensionsForUpload) 1752 { 1753 performDragControllerAction(DragControllerAction::PerformDragOperation, dragData, dragStorageName, sandboxExtensionHandle, sandboxExtensionsForUpload); 1754 } 1755 1756 void WebPageProxy::performDragControllerAction(DragControllerAction action, DragData& dragData, const String& dragStorageName, const SandboxExtension::Handle& sandboxExtensionHandle, const SandboxExtension::HandleArray& sandboxExtensionsForUpload) 1742 performDragControllerAction(DragControllerAction::Exited, dragData, dragStorageName, { }, { }); 1743 } 1744 1745 void WebPageProxy::performDragOperation(DragData& dragData, const String& dragStorageName, SandboxExtension::Handle&& sandboxExtensionHandle, SandboxExtension::HandleArray&& sandboxExtensionsForUpload) 1746 { 1747 performDragControllerAction(DragControllerAction::PerformDragOperation, dragData, dragStorageName, WTFMove(sandboxExtensionHandle), WTFMove(sandboxExtensionsForUpload)); 1748 } 1749 1750 void WebPageProxy::performDragControllerAction(DragControllerAction action, DragData& dragData, const String& dragStorageName, SandboxExtension::Handle&& sandboxExtensionHandle, SandboxExtension::HandleArray&& sandboxExtensionsForUpload) 1757 1751 { 1758 1752 if (!isValid()) -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r225827 r225926 853 853 void dragUpdated(WebCore::DragData&, const String& dragStorageName = String()); 854 854 void dragExited(WebCore::DragData&, const String& dragStorageName = String()); 855 void performDragOperation(WebCore::DragData&, const String& dragStorageName, const SandboxExtension::Handle&, const SandboxExtension::HandleArray&);855 void performDragOperation(WebCore::DragData&, const String& dragStorageName, SandboxExtension::Handle&&, SandboxExtension::HandleArray&&); 856 856 857 857 void didPerformDragControllerAction(uint64_t dragOperation, bool mouseIsOverFileInput, unsigned numberOfItemsToBeAccepted, const WebCore::IntRect& insertionRect); … … 1608 1608 void clearLoadDependentCallbacks(); 1609 1609 1610 void performDragControllerAction(DragControllerAction, WebCore::DragData&, const String& dragStorageName, const SandboxExtension::Handle&, const SandboxExtension::HandleArray&);1610 void performDragControllerAction(DragControllerAction, WebCore::DragData&, const String& dragStorageName, SandboxExtension::Handle&&, SandboxExtension::HandleArray&&); 1611 1611 1612 1612 void updateBackingStoreDiscardableState(); -
trunk/Source/WebKit/UIProcess/gtk/DragAndDropHandler.cpp
r213638 r225926 294 294 flags |= WebCore::DragApplicationIsCopyKeyDown; 295 295 DragData dragData(droppingContext->selectionData.ptr(), position, convertWidgetPointToScreenPoint(m_page.viewWidget(), position), gdkDragActionToDragOperation(gdk_drag_context_get_actions(context)), static_cast<WebCore::DragApplicationFlags>(flags)); 296 SandboxExtension::Handle handle; 297 SandboxExtension::HandleArray sandboxExtensionForUpload; 298 m_page.performDragOperation(dragData, String(), handle, sandboxExtensionForUpload); 296 m_page.performDragOperation(dragData, String(), { }, { }); 299 297 gtk_drag_finish(context, TRUE, FALSE, time); 300 298 return true; -
trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
r224819 r225926 4784 4784 SandboxExtension::HandleArray sandboxExtensionForUpload; 4785 4785 retainedSelf->_page->createSandboxExtensionsIfNeeded(filenames, sandboxExtensionHandle, sandboxExtensionForUpload); 4786 retainedSelf->_page->performDragOperation(capturedDragData, "data interaction pasteboard", sandboxExtensionHandle, sandboxExtensionForUpload);4786 retainedSelf->_page->performDragOperation(capturedDragData, "data interaction pasteboard", WTFMove(sandboxExtensionHandle), WTFMove(sandboxExtensionForUpload)); 4787 4787 4788 4788 retainedSelf->_visibleContentViewSnapshot = [retainedSelf snapshotViewAfterScreenUpdates:NO]; -
trunk/Source/WebKit/WebProcess/InjectedBundle/InjectedBundle.cpp
r225658 r225926 89 89 namespace WebKit { 90 90 91 RefPtr<InjectedBundle> InjectedBundle::create( constWebProcessCreationParameters& parameters, API::Object* initializationUserData)91 RefPtr<InjectedBundle> InjectedBundle::create(WebProcessCreationParameters& parameters, API::Object* initializationUserData) 92 92 { 93 93 auto bundle = adoptRef(*new InjectedBundle(parameters)); 94 94 95 bundle->m_sandboxExtension = SandboxExtension::create( parameters.injectedBundlePathExtensionHandle);95 bundle->m_sandboxExtension = SandboxExtension::create(WTFMove(parameters.injectedBundlePathExtensionHandle)); 96 96 if (!bundle->initialize(parameters, initializationUserData)) 97 97 return nullptr; -
trunk/Source/WebKit/WebProcess/InjectedBundle/InjectedBundle.h
r218534 r225926 75 75 class InjectedBundle : public API::ObjectImpl<API::Object::Type::Bundle> { 76 76 public: 77 static RefPtr<InjectedBundle> create( constWebProcessCreationParameters&, API::Object* initializationUserData);77 static RefPtr<InjectedBundle> create(WebProcessCreationParameters&, API::Object* initializationUserData); 78 78 79 79 ~InjectedBundle(); -
trunk/Source/WebKit/WebProcess/MediaStream/MediaDeviceSandboxExtensions.cpp
r209512 r225926 61 61 ASSERT_WITH_SECURITY_IMPLICATION(m_ids.size() == m_handles.size()); 62 62 ASSERT_WITH_SECURITY_IMPLICATION(i < m_ids.size()); 63 return { m_ids[i], SandboxExtension::create(m_handles[i]) }; 64 } 65 66 const std::pair<String, RefPtr<SandboxExtension>> MediaDeviceSandboxExtensions::operator[](size_t i) const 67 { 68 ASSERT_WITH_SECURITY_IMPLICATION(m_ids.size() == m_handles.size()); 69 ASSERT_WITH_SECURITY_IMPLICATION(i < m_ids.size()); 70 return { m_ids[i], SandboxExtension::create(m_handles[i]) }; 63 return { m_ids[i], SandboxExtension::create(WTFMove(m_handles[i])) }; 71 64 } 72 65 -
trunk/Source/WebKit/WebProcess/MediaStream/MediaDeviceSandboxExtensions.h
r209512 r225926 44 44 45 45 std::pair<String, RefPtr<SandboxExtension>> operator[](size_t i); 46 const std::pair<String, RefPtr<SandboxExtension>> operator[](size_t i) const;47 46 size_t size() const; 48 47 -
trunk/Source/WebKit/WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp
r225395 r225926 208 208 } 209 209 210 void UserMediaPermissionRequestManager::grantUserMediaDeviceSandboxExtensions( const MediaDeviceSandboxExtensions& extensions)210 void UserMediaPermissionRequestManager::grantUserMediaDeviceSandboxExtensions(MediaDeviceSandboxExtensions&& extensions) 211 211 { 212 212 for (size_t i = 0; i < extensions.size(); i++) { 213 auto& extension = extensions[i];213 const auto& extension = extensions[i]; 214 214 extension.second->consume(); 215 215 m_userMediaDeviceSandboxExtensions.add(extension.first, extension.second.copyRef()); -
trunk/Source/WebKit/WebProcess/MediaStream/UserMediaPermissionRequestManager.h
r225395 r225926 53 53 void didCompleteMediaDeviceEnumeration(uint64_t, const Vector<WebCore::CaptureDevice>& deviceList, String&& deviceIdentifierHashSalt, bool originHasPersistentAccess); 54 54 55 void grantUserMediaDeviceSandboxExtensions( const MediaDeviceSandboxExtensions&);55 void grantUserMediaDeviceSandboxExtensions(MediaDeviceSandboxExtensions&&); 56 56 void revokeUserMediaDeviceSandboxExtensions(const Vector<String>&); 57 57 -
trunk/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp
r225282 r225926 198 198 ASSERT(pathnames.size() == sandboxExtensionsHandleArray.size()); 199 199 for (size_t i = 0; i < sandboxExtensionsHandleArray.size(); i++) { 200 if (RefPtr<SandboxExtension> extension = SandboxExtension::create( sandboxExtensionsHandleArray[i]))200 if (RefPtr<SandboxExtension> extension = SandboxExtension::create(WTFMove(sandboxExtensionsHandleArray[i]))) 201 201 extension->consumePermanently(); 202 202 } -
trunk/Source/WebKit/WebProcess/WebPage/WebBackForwardListProxy.cpp
r222824 r225926 167 167 SandboxExtension::Handle sandboxExtensionHandle; 168 168 m_page->sendSync(Messages::WebPageProxy::BackForwardGoToItem(historyItemToIDMap().get(item).itemID), Messages::WebPageProxy::BackForwardGoToItem::Reply(sandboxExtensionHandle)); 169 m_page->sandboxExtensionTracker().beginLoad(m_page->mainWebFrame(), sandboxExtensionHandle);169 m_page->sandboxExtensionTracker().beginLoad(m_page->mainWebFrame(), WTFMove(sandboxExtensionHandle)); 170 170 } 171 171 -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r225925 r225926 1204 1204 #endif 1205 1205 1206 void WebPage::loadRequest( const LoadParameters& loadParameters)1206 void WebPage::loadRequest(LoadParameters&& loadParameters) 1207 1207 { 1208 1208 SendStopResponsivenessTimer stopper; … … 1210 1210 m_pendingNavigationID = loadParameters.navigationID; 1211 1211 1212 m_sandboxExtensionTracker.beginLoad(m_mainFrame.get(), loadParameters.sandboxExtensionHandle);1212 m_sandboxExtensionTracker.beginLoad(m_mainFrame.get(), WTFMove(loadParameters.sandboxExtensionHandle)); 1213 1213 1214 1214 // Let the InjectedBundle know we are about to start the load, passing the user data from the UIProcess … … 1329 1329 } 1330 1330 1331 void WebPage::reload(uint64_t navigationID, uint32_t reloadOptions, const SandboxExtension::Handle& sandboxExtensionHandle)1331 void WebPage::reload(uint64_t navigationID, uint32_t reloadOptions, SandboxExtension::Handle&& sandboxExtensionHandle) 1332 1332 { 1333 1333 SendStopResponsivenessTimer stopper; … … 1336 1336 m_pendingNavigationID = navigationID; 1337 1337 1338 m_sandboxExtensionTracker.beginLoad(m_mainFrame.get(), sandboxExtensionHandle);1338 m_sandboxExtensionTracker.beginLoad(m_mainFrame.get(), WTFMove(sandboxExtensionHandle)); 1339 1339 corePage()->userInputBridge().reloadFrame(m_mainFrame->coreFrame(), OptionSet<ReloadOption>::fromRaw(reloadOptions)); 1340 1340 } … … 3317 3317 } 3318 3318 #else 3319 void WebPage::performDragControllerAction(DragControllerAction action, const WebCore::DragData& dragData, const SandboxExtension::Handle& sandboxExtensionHandle, const SandboxExtension::HandleArray& sandboxExtensionsHandleArray)3319 void WebPage::performDragControllerAction(DragControllerAction action, const WebCore::DragData& dragData, SandboxExtension::Handle&& sandboxExtensionHandle, SandboxExtension::HandleArray&& sandboxExtensionsHandleArray) 3320 3320 { 3321 3321 if (!m_page) { … … 3343 3343 ASSERT(!m_pendingDropSandboxExtension); 3344 3344 3345 m_pendingDropSandboxExtension = SandboxExtension::create( sandboxExtensionHandle);3345 m_pendingDropSandboxExtension = SandboxExtension::create(WTFMove(sandboxExtensionHandle)); 3346 3346 for (size_t i = 0; i < sandboxExtensionsHandleArray.size(); i++) { 3347 if (RefPtr<SandboxExtension> extension = SandboxExtension::create( sandboxExtensionsHandleArray[i]))3347 if (RefPtr<SandboxExtension> extension = SandboxExtension::create(WTFMove(sandboxExtensionsHandleArray[i]))) 3348 3348 m_pendingDropExtensionsForFileUpload.append(extension); 3349 3349 } … … 3614 3614 } 3615 3615 #if ENABLE(SANDBOX_EXTENSIONS) 3616 void WebPage::grantUserMediaDeviceSandboxExtensions( const MediaDeviceSandboxExtensions& extensions)3617 { 3618 m_userMediaPermissionRequestManager->grantUserMediaDeviceSandboxExtensions( extensions);3616 void WebPage::grantUserMediaDeviceSandboxExtensions(MediaDeviceSandboxExtensions&& extensions) 3617 { 3618 m_userMediaPermissionRequestManager->grantUserMediaDeviceSandboxExtensions(WTFMove(extensions)); 3619 3619 } 3620 3620 … … 3940 3940 } 3941 3941 3942 void WebPage::SandboxExtensionTracker::beginLoad(WebFrame* frame, const SandboxExtension::Handle& handle)3942 void WebPage::SandboxExtensionTracker::beginLoad(WebFrame* frame, SandboxExtension::Handle&& handle) 3943 3943 { 3944 3944 ASSERT_UNUSED(frame, frame->isMainFrame()); 3945 3945 3946 setPendingProvisionalSandboxExtension(SandboxExtension::create( handle));3946 setPendingProvisionalSandboxExtension(SandboxExtension::create(WTFMove(handle))); 3947 3947 } 3948 3948 -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.h
r225925 r225926 659 659 void invalidate(); 660 660 661 void beginLoad(WebFrame*, const SandboxExtension::Handle& handle);661 void beginLoad(WebFrame*, SandboxExtension::Handle&&); 662 662 void willPerformLoadDragDestinationAction(RefPtr<SandboxExtension>&& pendingDropSandboxExtension); 663 663 void didStartProvisionalLoad(WebFrame*); … … 764 764 765 765 #if ENABLE(DRAG_SUPPORT) && !PLATFORM(GTK) 766 void performDragControllerAction(DragControllerAction, const WebCore::DragData&, const SandboxExtension::Handle&, const SandboxExtension::HandleArray&);766 void performDragControllerAction(DragControllerAction, const WebCore::DragData&, SandboxExtension::Handle&&, SandboxExtension::HandleArray&&); 767 767 #endif 768 768 … … 1112 1112 void tryClose(); 1113 1113 void platformDidReceiveLoadParameters(const LoadParameters&); 1114 void loadRequest( const LoadParameters&);1114 void loadRequest(LoadParameters&&); 1115 1115 void loadData(const LoadParameters&); 1116 1116 void loadString(const LoadParameters&); 1117 1117 void loadAlternateHTMLString(const LoadParameters&); 1118 1118 void navigateToPDFLinkWithSimulatedClick(const String& url, WebCore::IntPoint documentPoint, WebCore::IntPoint screenPoint); 1119 void reload(uint64_t navigationID, uint32_t reloadOptions, const SandboxExtension::Handle&);1119 void reload(uint64_t navigationID, uint32_t reloadOptions, SandboxExtension::Handle&&); 1120 1120 void goForward(uint64_t navigationID, uint64_t); 1121 1121 void goBack(uint64_t navigationID, uint64_t); … … 1261 1261 1262 1262 #if ENABLE(MEDIA_STREAM) && ENABLE(SANDBOX_EXTENSIONS) 1263 void grantUserMediaDeviceSandboxExtensions( const MediaDeviceSandboxExtensions&);1263 void grantUserMediaDeviceSandboxExtensions(MediaDeviceSandboxExtensions&&); 1264 1264 void revokeUserMediaDeviceSandboxExtensions(const Vector<String>&); 1265 1265 #endif -
trunk/Source/WebKit/WebProcess/WebProcess.cpp
r225863 r225926 1196 1196 } 1197 1197 1198 void WebProcess::startMemorySampler( const SandboxExtension::Handle& sampleLogFileHandle, const String& sampleLogFilePath, const double interval)1198 void WebProcess::startMemorySampler(SandboxExtension::Handle&& sampleLogFileHandle, const String& sampleLogFilePath, const double interval) 1199 1199 { 1200 1200 #if ENABLE(MEMORY_SAMPLER) 1201 WebMemorySampler::singleton()->start( sampleLogFileHandle, sampleLogFilePath, interval);1201 WebMemorySampler::singleton()->start(WTFMove(sampleLogFileHandle), sampleLogFilePath, interval); 1202 1202 #else 1203 1203 UNUSED_PARAM(sampleLogFileHandle); -
trunk/Source/WebKit/WebProcess/WebProcess.h
r225592 r225926 283 283 void setEnhancedAccessibility(bool); 284 284 285 void startMemorySampler( const SandboxExtension::Handle&, const String&, const double);285 void startMemorySampler(SandboxExtension::Handle&&, const String&, const double); 286 286 void stopMemorySampler(); 287 287
Note:
See TracChangeset
for help on using the changeset viewer.