WebKit Bugzilla
Attachment 342470 Details for
Bug 186543
: Make CompletionHandler more const correct
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-186543-20180611151117.patch (text/plain), 44.88 KB, created by
Alex Christensen
on 2018-06-11 15:11:17 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Alex Christensen
Created:
2018-06-11 15:11:17 PDT
Size:
44.88 KB
patch
obsolete
>Index: Source/WTF/ChangeLog >=================================================================== >--- Source/WTF/ChangeLog (revision 232732) >+++ Source/WTF/ChangeLog (working copy) >@@ -1,3 +1,14 @@ >+2018-06-11 Alex Christensen <achristensen@webkit.org> >+ >+ Make CompletionHandler more const correct >+ https://bugs.webkit.org/show_bug.cgi?id=186543 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * wtf/CompletionHandler.h: >+ (WTF::CompletionHandler<Out): >+ Calling a CompletionHandler mutates it. Make the code reflect that. >+ > 2018-06-11 Michael Saboff <msaboff@apple.com> > > JavaScriptCore: Disable 32-bit JIT on Windows >Index: Source/WTF/wtf/CompletionHandler.h >=================================================================== >--- Source/WTF/wtf/CompletionHandler.h (revision 232732) >+++ Source/WTF/wtf/CompletionHandler.h (working copy) >@@ -25,13 +25,13 @@ > > #pragma once > >-#include "Function.h" >+#include <wtf/Function.h> > > namespace WTF { > > template<typename> class CompletionHandler; > >-// Wraps a WTF::Function to make sure it is always called once and only once. >+// Wraps a Function to make sure it is always called once and only once on the correct thread. > template <typename Out, typename... In> > class CompletionHandler<Out(In...)> { > public: >@@ -53,15 +53,14 @@ public: > > explicit operator bool() const { return !!m_function; } > >- Out operator()(In... in) const >+ Out operator()(In... in) > { > ASSERT_WITH_MESSAGE(m_function, "Completion handler should not be called more than once"); >- auto function = WTFMove(m_function); >- return function(std::forward<In>(in)...); >+ return std::exchange(m_function, nullptr)(std::forward<In>(in)...); > } > > private: >- mutable WTF::Function<Out(In...)> m_function; >+ Function<Out(In...)> m_function; > }; > > class CompletionHandlerCallingScope { >Index: Source/WebCore/ChangeLog >=================================================================== >--- Source/WebCore/ChangeLog (revision 232732) >+++ Source/WebCore/ChangeLog (working copy) >@@ -1,3 +1,32 @@ >+2018-06-11 Alex Christensen <achristensen@webkit.org> >+ >+ Make CompletionHandler more const correct >+ https://bugs.webkit.org/show_bug.cgi?id=186543 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * dom/messageports/MessagePortChannel.cpp: >+ (WebCore::MessagePortChannel::checkRemotePortForActivity): >+ * dom/messageports/MessagePortChannelProviderImpl.cpp: >+ (WebCore::MessagePortChannelProviderImpl::checkRemotePortForActivity): >+ * loader/DocumentLoader.cpp: >+ (WebCore::DocumentLoader::responseReceived): >+ * loader/FrameLoader.cpp: >+ (WebCore::FrameLoader::loadURL): >+ (WebCore::FrameLoader::loadWithDocumentLoader): >+ (WebCore::FrameLoader::loadPostRequest): >+ * platform/network/cocoa/WebCoreNSURLSession.mm: >+ (WebCore::WebCoreNSURLSessionDataTaskClient::redirectReceived): >+ * workers/service/server/RegistrationDatabase.cpp: >+ (WebCore::RegistrationDatabase::pushChanges): >+ (WebCore::RegistrationDatabase::clearAll): >+ * workers/service/server/SWServer.cpp: >+ (WebCore::SWServer::matchAll): >+ * workers/service/server/SWServer.h: >+ * workers/service/server/SWServerWorker.cpp: >+ (WebCore::SWServerWorker::matchAll): >+ * workers/service/server/SWServerWorker.h: >+ > 2018-06-11 Tim Horton <timothy_horton@apple.com> > > Link drag image is inconsistently unreadable in dark mode >Index: Source/WebCore/dom/messageports/MessagePortChannel.cpp >=================================================================== >--- Source/WebCore/dom/messageports/MessagePortChannel.cpp (revision 232732) >+++ Source/WebCore/dom/messageports/MessagePortChannel.cpp (working copy) >@@ -207,7 +207,7 @@ void MessagePortChannel::checkRemotePort > return; > } > >- auto outerCallback = CompletionHandler<void(MessagePortChannelProvider::HasActivity)> { [this, protectedThis = makeRef(*this), callback = WTFMove(callback)] (MessagePortChannelProvider::HasActivity hasActivity) { >+ auto outerCallback = CompletionHandler<void(MessagePortChannelProvider::HasActivity)> { [this, protectedThis = makeRef(*this), callback = WTFMove(callback)] (MessagePortChannelProvider::HasActivity hasActivity) mutable { > if (hasActivity == MessagePortChannelProvider::HasActivity::Yes) { > callback(hasActivity); > return; >Index: Source/WebCore/dom/messageports/MessagePortChannelProviderImpl.cpp >=================================================================== >--- Source/WebCore/dom/messageports/MessagePortChannelProviderImpl.cpp (revision 232732) >+++ Source/WebCore/dom/messageports/MessagePortChannelProviderImpl.cpp (working copy) >@@ -102,7 +102,7 @@ void MessagePortChannelProviderImpl::tak > > void MessagePortChannelProviderImpl::checkRemotePortForActivity(const MessagePortIdentifier& remoteTarget, CompletionHandler<void(HasActivity)>&& outerCallback) > { >- auto callback = CompletionHandler<void(HasActivity)> { [outerCallback = WTFMove(outerCallback)](HasActivity hasActivity) { >+ auto callback = CompletionHandler<void(HasActivity)> { [outerCallback = WTFMove(outerCallback)](HasActivity hasActivity) mutable { > ASSERT(isMainThread()); > outerCallback(hasActivity); > } }; >Index: Source/WebCore/loader/DocumentLoader.cpp >=================================================================== >--- Source/WebCore/loader/DocumentLoader.cpp (revision 232732) >+++ Source/WebCore/loader/DocumentLoader.cpp (working copy) >@@ -836,7 +836,7 @@ void DocumentLoader::responseReceived(co > RefPtr<SubresourceLoader> mainResourceLoader = this->mainResourceLoader(); > if (mainResourceLoader) > mainResourceLoader->markInAsyncResponsePolicyCheck(); >- frameLoader()->checkContentPolicy(m_response, [this, protectedThis = makeRef(*this), mainResourceLoader = WTFMove(mainResourceLoader), completionHandler = completionHandlerCaller.release()](PolicyAction policy) { >+ frameLoader()->checkContentPolicy(m_response, [this, protectedThis = makeRef(*this), mainResourceLoader = WTFMove(mainResourceLoader), completionHandler = completionHandlerCaller.release()] (PolicyAction policy) mutable { > continueAfterContentPolicy(policy); > if (mainResourceLoader) > mainResourceLoader->didReceiveResponsePolicy(); >Index: Source/WebCore/loader/FrameLoader.cpp >=================================================================== >--- Source/WebCore/loader/FrameLoader.cpp (revision 232732) >+++ Source/WebCore/loader/FrameLoader.cpp (working copy) >@@ -1359,7 +1359,7 @@ void FrameLoader::loadURL(FrameLoadReque > > if (!targetFrame && !frameName.isEmpty()) { > action = action.copyWithShouldOpenExternalURLsPolicy(shouldOpenExternalURLsPolicyToApply(m_frame, frameLoadRequest)); >- policyChecker().checkNewWindowPolicy(WTFMove(action), WTFMove(request), WTFMove(formState), frameName, [this, allowNavigationToInvalidURL, openerPolicy, completionHandler = completionHandlerCaller.release()] (const ResourceRequest& request, WeakPtr<FormState>&& formState, const String& frameName, const NavigationAction& action, ShouldContinue shouldContinue) { >+ policyChecker().checkNewWindowPolicy(WTFMove(action), WTFMove(request), WTFMove(formState), frameName, [this, allowNavigationToInvalidURL, openerPolicy, completionHandler = completionHandlerCaller.release()] (const ResourceRequest& request, WeakPtr<FormState>&& formState, const String& frameName, const NavigationAction& action, ShouldContinue shouldContinue) mutable { > continueLoadAfterNewWindowPolicy(request, formState.get(), frameName, action, shouldContinue, allowNavigationToInvalidURL, openerPolicy); > completionHandler(); > }); >@@ -1393,7 +1393,7 @@ void FrameLoader::loadURL(FrameLoadReque > if (isSystemPreview) > request.setSystemPreviewRect(frameLoadRequest.systemPreviewRect()); > #endif >- loadWithNavigationAction(request, action, lockHistory, newLoadType, WTFMove(formState), allowNavigationToInvalidURL, [this, isRedirect, sameURL, newLoadType, protectedFrame = makeRef(m_frame), completionHandler = completionHandlerCaller.release()] { >+ loadWithNavigationAction(request, action, lockHistory, newLoadType, WTFMove(formState), allowNavigationToInvalidURL, [this, isRedirect, sameURL, newLoadType, protectedFrame = makeRef(m_frame), completionHandler = completionHandlerCaller.release()] () mutable { > if (isRedirect) { > m_quickRedirectComing = false; > if (m_provisionalDocumentLoader) >@@ -1588,7 +1588,7 @@ void FrameLoader::loadWithDocumentLoader > return; > } > >- policyChecker().checkNavigationPolicy(ResourceRequest(loader->request()), false /* didReceiveRedirectResponse */, loader, WTFMove(formState), [this, protectedFrame = makeRef(m_frame), allowNavigationToInvalidURL, completionHandler = completionHandlerCaller.release()] (const ResourceRequest& request, WeakPtr<FormState>&& formState, ShouldContinue shouldContinue) { >+ policyChecker().checkNavigationPolicy(ResourceRequest(loader->request()), false /* didReceiveRedirectResponse */, loader, WTFMove(formState), [this, protectedFrame = makeRef(m_frame), allowNavigationToInvalidURL, completionHandler = completionHandlerCaller.release()] (const ResourceRequest& request, WeakPtr<FormState>&& formState, ShouldContinue shouldContinue) mutable { > continueLoadAfterNavigationPolicy(request, formState.get(), shouldContinue, allowNavigationToInvalidURL); > completionHandler(); > }); >@@ -2907,7 +2907,7 @@ void FrameLoader::loadPostRequest(FrameL > return; > } > >- policyChecker().checkNewWindowPolicy(WTFMove(action), WTFMove(workingResourceRequest), WTFMove(formState), frameName, [this, allowNavigationToInvalidURL, openerPolicy, completionHandler = WTFMove(completionHandler)] (const ResourceRequest& request, WeakPtr<FormState>&& formState, const String& frameName, const NavigationAction& action, ShouldContinue shouldContinue) { >+ policyChecker().checkNewWindowPolicy(WTFMove(action), WTFMove(workingResourceRequest), WTFMove(formState), frameName, [this, allowNavigationToInvalidURL, openerPolicy, completionHandler = WTFMove(completionHandler)] (const ResourceRequest& request, WeakPtr<FormState>&& formState, const String& frameName, const NavigationAction& action, ShouldContinue shouldContinue) mutable { > continueLoadAfterNewWindowPolicy(request, formState.get(), frameName, action, shouldContinue, allowNavigationToInvalidURL, openerPolicy); > completionHandler(); > }); >@@ -2916,7 +2916,7 @@ void FrameLoader::loadPostRequest(FrameL > > // must grab this now, since this load may stop the previous load and clear this flag > bool isRedirect = m_quickRedirectComing; >- loadWithNavigationAction(workingResourceRequest, action, lockHistory, loadType, WTFMove(formState), allowNavigationToInvalidURL, [this, isRedirect, protectedFrame = makeRef(m_frame), completionHandler = WTFMove(completionHandler)] { >+ loadWithNavigationAction(workingResourceRequest, action, lockHistory, loadType, WTFMove(formState), allowNavigationToInvalidURL, [this, isRedirect, protectedFrame = makeRef(m_frame), completionHandler = WTFMove(completionHandler)] () mutable { > if (isRedirect) { > m_quickRedirectComing = false; > if (m_provisionalDocumentLoader) >Index: Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm >=================================================================== >--- Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm (revision 232732) >+++ Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm (working copy) >@@ -418,7 +418,7 @@ void WebCoreNSURLSessionDataTaskClient:: > if (!m_task) > return; > >- [m_task resource:resource receivedRedirect:response request:WTFMove(request) completionHandler: [completionHandler = WTFMove(completionHandler)] (auto&& request) { >+ [m_task resource:resource receivedRedirect:response request:WTFMove(request) completionHandler: [completionHandler = WTFMove(completionHandler)] (auto&& request) mutable { > ASSERT(isMainThread()); > completionHandler(WTFMove(request)); > }]; >Index: Source/WebCore/workers/service/server/RegistrationDatabase.cpp >=================================================================== >--- Source/WebCore/workers/service/server/RegistrationDatabase.cpp (revision 232732) >+++ Source/WebCore/workers/service/server/RegistrationDatabase.cpp (working copy) >@@ -257,13 +257,13 @@ void RegistrationDatabase::pushChanges(V > if (!completionHandler) > return; > >- postTaskReply(CrossThreadTask([completionHandler = WTFMove(completionHandler)] { >+ postTaskReply(CrossThreadTask([completionHandler = WTFMove(completionHandler)] () mutable { > completionHandler(); > })); > })); > } > >-void RegistrationDatabase::clearAll(WTF::CompletionHandler<void()>&& completionHandler) >+void RegistrationDatabase::clearAll(CompletionHandler<void()>&& completionHandler) > { > postTask(CrossThreadTask([this, completionHandler = WTFMove(completionHandler)]() mutable { > m_database = nullptr; >@@ -271,7 +271,7 @@ void RegistrationDatabase::clearAll(WTF: > SQLiteFileSystem::deleteDatabaseFile(m_databaseFilePath); > SQLiteFileSystem::deleteEmptyDatabaseDirectory(m_databaseDirectory); > >- postTaskReply(CrossThreadTask([completionHandler = WTFMove(completionHandler)] { >+ postTaskReply(CrossThreadTask([completionHandler = WTFMove(completionHandler)] () mutable { > completionHandler(); > })); > })); >Index: Source/WebCore/workers/service/server/SWServer.cpp >=================================================================== >--- Source/WebCore/workers/service/server/SWServer.cpp (revision 232732) >+++ Source/WebCore/workers/service/server/SWServer.cpp (working copy) >@@ -416,7 +416,7 @@ void SWServer::didFinishActivation(SWSer > } > > // https://w3c.github.io/ServiceWorker/#clients-getall >-void SWServer::matchAll(SWServerWorker& worker, const ServiceWorkerClientQueryOptions& options, const ServiceWorkerClientsMatchAllCallback& callback) >+void SWServer::matchAll(SWServerWorker& worker, const ServiceWorkerClientQueryOptions& options, ServiceWorkerClientsMatchAllCallback&& callback) > { > // FIXME: Support reserved client filtering. > // FIXME: Support WindowClient additional properties. >Index: Source/WebCore/workers/service/server/SWServer.h >=================================================================== >--- Source/WebCore/workers/service/server/SWServer.h (revision 232732) >+++ Source/WebCore/workers/service/server/SWServer.h (working copy) >@@ -152,7 +152,7 @@ public: > void didFinishInstall(const std::optional<ServiceWorkerJobDataIdentifier>&, SWServerWorker&, bool wasSuccessful); > void didFinishActivation(SWServerWorker&); > void workerContextTerminated(SWServerWorker&); >- void matchAll(SWServerWorker&, const ServiceWorkerClientQueryOptions&, const ServiceWorkerClientsMatchAllCallback&); >+ void matchAll(SWServerWorker&, const ServiceWorkerClientQueryOptions&, ServiceWorkerClientsMatchAllCallback&&); > void claim(SWServerWorker&); > > WEBCORE_EXPORT void serverToContextConnectionCreated(SWServerToContextConnection&); >Index: Source/WebCore/workers/service/server/SWServerWorker.cpp >=================================================================== >--- Source/WebCore/workers/service/server/SWServerWorker.cpp (revision 232732) >+++ Source/WebCore/workers/service/server/SWServerWorker.cpp (working copy) >@@ -131,9 +131,9 @@ std::optional<ServiceWorkerClientData> S > return m_server.serviceWorkerClientWithOriginByID(origin(), clientId); > } > >-void SWServerWorker::matchAll(const ServiceWorkerClientQueryOptions& options, const ServiceWorkerClientsMatchAllCallback& callback) >+void SWServerWorker::matchAll(const ServiceWorkerClientQueryOptions& options, ServiceWorkerClientsMatchAllCallback&& callback) > { >- return m_server.matchAll(*this, options, callback); >+ return m_server.matchAll(*this, options, WTFMove(callback)); > } > > void SWServerWorker::claim() >Index: Source/WebCore/workers/service/server/SWServerWorker.h >=================================================================== >--- Source/WebCore/workers/service/server/SWServerWorker.h (revision 232732) >+++ Source/WebCore/workers/service/server/SWServerWorker.h (working copy) >@@ -92,7 +92,7 @@ public: > void didFinishActivation(); > void contextTerminated(); > WEBCORE_EXPORT std::optional<ServiceWorkerClientData> findClientByIdentifier(const ServiceWorkerClientIdentifier&) const; >- void matchAll(const ServiceWorkerClientQueryOptions&, const ServiceWorkerClientsMatchAllCallback&); >+ void matchAll(const ServiceWorkerClientQueryOptions&, ServiceWorkerClientsMatchAllCallback&&); > void claim(); > void setScriptResource(URL&&, ServiceWorkerContextData::ImportedScript&&); > >Index: Source/WebKit/ChangeLog >=================================================================== >--- Source/WebKit/ChangeLog (revision 232732) >+++ Source/WebKit/ChangeLog (working copy) >@@ -1,3 +1,46 @@ >+2018-06-11 Alex Christensen <achristensen@webkit.org> >+ >+ Make CompletionHandler more const correct >+ https://bugs.webkit.org/show_bug.cgi?id=186543 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * NetworkProcess/PingLoad.cpp: >+ (WebKit::PingLoad::willPerformHTTPRedirection): >+ * NetworkProcess/cache/CacheStorageEngine.cpp: >+ (WebKit::CacheStorage::Engine::clearAllCaches): >+ * UIProcess/Automation/SimulatedInputDispatcher.cpp: >+ (WebKit::SimulatedInputDispatcher::transitionInputSourceToState): >+ * UIProcess/Automation/WebAutomationSession.cpp: >+ (WebKit::WebAutomationSession::simulateMouseInteraction): >+ (WebKit::WebAutomationSession::simulateKeyboardInteraction): >+ * UIProcess/Cocoa/AutomationSessionClient.mm: >+ (WebKit::AutomationSessionClient::requestNewPageWithOptions): >+ (WebKit::AutomationSessionClient::requestSwitchToPage): >+ (WebKit::AutomationSessionClient::requestHideWindowOfPage): >+ (WebKit::AutomationSessionClient::requestRestoreWindowOfPage): >+ * UIProcess/Cocoa/UIDelegate.mm: >+ (WebKit::UIDelegate::ContextMenuClient::menuFromProposedMenu): >+ (WebKit::UIDelegate::UIClient::createNewPage): >+ (WebKit::UIDelegate::UIClient::runJavaScriptAlert): >+ (WebKit::UIDelegate::UIClient::runJavaScriptConfirm): >+ (WebKit::UIDelegate::UIClient::runJavaScriptPrompt): >+ (WebKit::UIDelegate::UIClient::requestStorageAccessConfirm): >+ (WebKit::UIDelegate::UIClient::decidePolicyForGeolocationPermissionRequest): >+ (WebKit::UIDelegate::UIClient::runBeforeUnloadConfirmPanel): >+ (WebKit::UIDelegate::UIClient::decidePolicyForNotificationPermissionRequest): >+ (WebKit::UIDelegate::UIClient::runOpenPanel): >+ * UIProcess/WebPageProxy.cpp: >+ (WebKit::WebPageProxy::createNewPage): >+ (WebKit::WebPageProxy::webGLPolicyForURL): >+ (WebKit::WebPageProxy::resolveWebGLPolicyForURL): >+ (WebKit::WebPageProxy::getWindowFrame): >+ * UIProcess/WebResourceLoadStatisticsStore.cpp: >+ (WebKit::WebResourceLoadStatisticsStore::hasStorageAccess): >+ (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess): >+ (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent): >+ (WebKit::WebResourceLoadStatisticsStore::updateCookiePartitioning): >+ > 2018-06-11 Tim Horton <timothy_horton@apple.com> > > Link drag image is inconsistently unreadable in dark mode >Index: Source/WebKit/NetworkProcess/PingLoad.cpp >=================================================================== >--- Source/WebKit/NetworkProcess/PingLoad.cpp (revision 232732) >+++ Source/WebKit/NetworkProcess/PingLoad.cpp (working copy) >@@ -93,7 +93,7 @@ void PingLoad::loadRequest(ResourceReque > > void PingLoad::willPerformHTTPRedirection(ResourceResponse&& redirectResponse, ResourceRequest&& request, RedirectCompletionHandler&& completionHandler) > { >- m_networkLoadChecker->checkRedirection(redirectResponse, WTFMove(request), [this, completionHandler = WTFMove(completionHandler)](auto&& result) { >+ m_networkLoadChecker->checkRedirection(redirectResponse, WTFMove(request), [this, completionHandler = WTFMove(completionHandler)](auto&& result) mutable { > if (!result.has_value()) { > completionHandler({ }); > this->didFinish(result.error()); >Index: Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp >=================================================================== >--- Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp (revision 232732) >+++ Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp (working copy) >@@ -431,11 +431,12 @@ void Engine::clearAllCaches(CallbackAggr > if (!shouldPersist()) > return; > >- m_ioQueue->dispatch([path = m_rootPath.isolatedCopy(), taskHandler = makeRef(taskHandler)] { >+ m_ioQueue->dispatch([path = m_rootPath.isolatedCopy(), taskHandler = makeRef(taskHandler)] () mutable { > for (auto& filename : WebCore::FileSystem::listDirectory(path, "*")) { > if (WebCore::FileSystem::fileIsDirectory(filename, WebCore::FileSystem::ShouldFollowSymbolicLinks::No)) > deleteDirectoryRecursively(filename); > } >+ RunLoop::main().dispatch([taskHandler = WTFMove(taskHandler)] () mutable { }); > }); > } > >Index: Source/WebKit/UIProcess/WebPageProxy.cpp >=================================================================== >--- Source/WebKit/UIProcess/WebPageProxy.cpp (revision 232732) >+++ Source/WebKit/UIProcess/WebPageProxy.cpp (working copy) >@@ -4238,7 +4238,7 @@ void WebPageProxy::createNewPage(const F > > auto mainFrameURL = m_mainFrame->url(); > >- m_uiClient->createNewPage(*this, WTFMove(originatingFrameInfo), WTFMove(request), WTFMove(windowFeatures), WTFMove(navigationActionData), [this, protectedThis = makeRef(*this), mainFrameURL, request, reply = WTFMove(reply)](RefPtr<WebPageProxy> newPage) { >+ m_uiClient->createNewPage(*this, WTFMove(originatingFrameInfo), WTFMove(request), WTFMove(windowFeatures), WTFMove(navigationActionData), [this, protectedThis = makeRef(*this), mainFrameURL, request, reply = WTFMove(reply)] (RefPtr<WebPageProxy> newPage) mutable { > if (!newPage) { > reply(0, { }); > return; >@@ -4419,7 +4419,7 @@ void WebPageProxy::unavailablePluginButt > void WebPageProxy::webGLPolicyForURL(URL&& url, Messages::WebPageProxy::WebGLPolicyForURL::DelayedReply&& reply) > { > if (m_navigationClient) { >- m_navigationClient->webGLLoadPolicy(*this, url, [reply = WTFMove(reply)](WebGLLoadPolicy policy) { >+ m_navigationClient->webGLLoadPolicy(*this, url, [reply = WTFMove(reply)] (WebGLLoadPolicy policy) mutable { > reply(static_cast<uint32_t>(policy)); > }); > } else >@@ -4429,7 +4429,7 @@ void WebPageProxy::webGLPolicyForURL(URL > void WebPageProxy::resolveWebGLPolicyForURL(URL&& url, Messages::WebPageProxy::ResolveWebGLPolicyForURL::DelayedReply&& reply) > { > if (m_navigationClient) { >- m_navigationClient->resolveWebGLLoadPolicy(*this, url, [reply = WTFMove(reply)](WebGLLoadPolicy policy) { >+ m_navigationClient->resolveWebGLLoadPolicy(*this, url, [reply = WTFMove(reply)] (WebGLLoadPolicy policy) mutable { > reply(static_cast<uint32_t>(policy)); > }); > } else >@@ -4479,7 +4479,7 @@ void WebPageProxy::setWindowFrame(const > > void WebPageProxy::getWindowFrame(Messages::WebPageProxy::GetWindowFrame::DelayedReply&& reply) > { >- m_uiClient->windowFrame(*this, [this, protectedThis = makeRef(*this), reply = WTFMove(reply)] (FloatRect frame) { >+ m_uiClient->windowFrame(*this, [this, protectedThis = makeRef(*this), reply = WTFMove(reply)] (FloatRect frame) mutable { > reply(m_pageClient.convertToUserSpace(frame)); > }); > } >Index: Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.cpp >=================================================================== >--- Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.cpp (revision 232732) >+++ Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.cpp (working copy) >@@ -342,14 +342,14 @@ void WebResourceLoadStatisticsStore::has > > auto& subFrameStatistic = ensureResourceStatisticsForPrimaryDomain(subFramePrimaryDomain); > if (shouldBlockCookies(subFrameStatistic)) { >- RunLoop::main().dispatch([callback = WTFMove(callback)] { >+ RunLoop::main().dispatch([callback = WTFMove(callback)] () mutable { > callback(false); > }); > return; > } > > if (!shouldPartitionCookies(subFrameStatistic)) { >- RunLoop::main().dispatch([callback = WTFMove(callback)] { >+ RunLoop::main().dispatch([callback = WTFMove(callback)] () mutable { > callback(true); > }); > return; >@@ -379,14 +379,14 @@ void WebResourceLoadStatisticsStore::req > > auto& subFrameStatistic = ensureResourceStatisticsForPrimaryDomain(subFramePrimaryDomain); > if (shouldBlockCookies(subFrameStatistic)) { >- RunLoop::main().dispatch([callback = WTFMove(callback)] { >+ RunLoop::main().dispatch([callback = WTFMove(callback)] () mutable { > callback(StorageAccessStatus::CannotRequestAccess); > }); > return; > } > > if (!shouldPartitionCookies(subFrameStatistic)) { >- RunLoop::main().dispatch([callback = WTFMove(callback)] { >+ RunLoop::main().dispatch([callback = WTFMove(callback)] () mutable { > callback(StorageAccessStatus::HasAccess); > }); > return; >@@ -394,7 +394,7 @@ void WebResourceLoadStatisticsStore::req > > auto userWasPromptedEarlier = promptEnabled && hasUserGrantedStorageAccessThroughPrompt(subFrameStatistic, topFramePrimaryDomain); > if (promptEnabled && !userWasPromptedEarlier) { >- RunLoop::main().dispatch([callback = WTFMove(callback)] { >+ RunLoop::main().dispatch([callback = WTFMove(callback)] () mutable { > callback(StorageAccessStatus::RequiresUserPrompt); > }); > return; >@@ -880,12 +880,9 @@ void WebResourceLoadStatisticsStore::sch > m_persistentStorage.clear(); > > if (shouldGrandfather == ShouldGrandfather::Yes) >- grandfatherExistingWebsiteData([protectedThis = WTFMove(protectedThis), callback = WTFMove(callback)]() { >- callback(); >- }); >- else { >+ grandfatherExistingWebsiteData(WTFMove(callback)); >+ else > callback(); >- } > }); > } > >@@ -1130,7 +1127,7 @@ void WebResourceLoadStatisticsStore::upd > } > #endif > >- RunLoop::main().dispatch([this, protectedThis = makeRef(*this), domainsToPartition = crossThreadCopy(domainsToPartition), domainsToBlock = crossThreadCopy(domainsToBlock), domainsToNeitherPartitionNorBlock = crossThreadCopy(domainsToNeitherPartitionNorBlock), callback = WTFMove(callback)] () { >+ RunLoop::main().dispatch([this, protectedThis = makeRef(*this), domainsToPartition = crossThreadCopy(domainsToPartition), domainsToBlock = crossThreadCopy(domainsToBlock), domainsToNeitherPartitionNorBlock = crossThreadCopy(domainsToNeitherPartitionNorBlock), callback = WTFMove(callback)] () mutable { > m_updatePrevalentDomainsToPartitionOrBlockCookiesHandler(domainsToPartition, domainsToBlock, domainsToNeitherPartitionNorBlock, ShouldClearFirst::No); > callback(); > #if !RELEASE_LOG_DISABLED >Index: Source/WebKit/UIProcess/Automation/SimulatedInputDispatcher.cpp >=================================================================== >--- Source/WebKit/UIProcess/Automation/SimulatedInputDispatcher.cpp (revision 232732) >+++ Source/WebKit/UIProcess/Automation/SimulatedInputDispatcher.cpp (working copy) >@@ -229,7 +229,7 @@ void SimulatedInputDispatcher::transitio > SimulatedInputSourceState& a = inputSource.state; > SimulatedInputSourceState& b = newState; > >- AutomationCompletionHandler eventDispatchFinished = [&inputSource, &newState, completionHandler = WTFMove(completionHandler)](std::optional<AutomationCommandError> error) { >+ AutomationCompletionHandler eventDispatchFinished = [&inputSource, &newState, completionHandler = WTFMove(completionHandler)](std::optional<AutomationCommandError> error) mutable { > if (error) { > completionHandler(error); > return; >Index: Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp >=================================================================== >--- Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp (revision 232732) >+++ Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp (working copy) >@@ -1458,7 +1458,7 @@ void WebAutomationSession::simulateMouse > } > > // Bridge the flushed callback to our command's completion handler. >- auto mouseEventsFlushedCallback = [completionHandler = WTFMove(completionHandler)](std::optional<AutomationCommandError> error) { >+ auto mouseEventsFlushedCallback = [completionHandler = WTFMove(completionHandler)](std::optional<AutomationCommandError> error) mutable { > completionHandler(error); > }; > >@@ -1482,7 +1482,7 @@ void WebAutomationSession::simulateMouse > void WebAutomationSession::simulateKeyboardInteraction(WebPageProxy& page, KeyboardInteraction interaction, std::optional<VirtualKey> virtualKey, std::optional<CharKey> charKey, CompletionHandler<void(std::optional<AutomationCommandError>)>&& completionHandler) > { > // Bridge the flushed callback to our command's completion handler. >- auto keyboardEventsFlushedCallback = [completionHandler = WTFMove(completionHandler)](std::optional<AutomationCommandError> error) { >+ auto keyboardEventsFlushedCallback = [completionHandler = WTFMove(completionHandler)](std::optional<AutomationCommandError> error) mutable { > completionHandler(error); > }; > >Index: Source/WebKit/UIProcess/Cocoa/AutomationSessionClient.mm >=================================================================== >--- Source/WebKit/UIProcess/Cocoa/AutomationSessionClient.mm (revision 232732) >+++ Source/WebKit/UIProcess/Cocoa/AutomationSessionClient.mm (working copy) >@@ -90,11 +90,11 @@ static inline _WKAutomationSessionBrowsi > void AutomationSessionClient::requestNewPageWithOptions(WebAutomationSession& session, API::AutomationSessionBrowsingContextOptions options, CompletionHandler<void(WebKit::WebPageProxy*)>&& completionHandler) > { > if (m_delegateMethods.requestNewWebViewWithOptions) { >- [m_delegate.get() _automationSession:wrapper(session) requestNewWebViewWithOptions:toAPI(options) completionHandler:BlockPtr<void(WKWebView *)>::fromCallable([completionHandler = WTFMove(completionHandler)](WKWebView *webView) { >+ [m_delegate.get() _automationSession:wrapper(session) requestNewWebViewWithOptions:toAPI(options) completionHandler:BlockPtr<void(WKWebView *)>::fromCallable([completionHandler = WTFMove(completionHandler)](WKWebView *webView) mutable { > completionHandler(webView->_page.get()); > }).get()]; > } else if (m_delegateMethods.requestNewPageWithOptions) { >- [m_delegate.get() _automationSession:wrapper(session) requestNewPageWithOptions:toAPI(options) completionHandler:BlockPtr<void(WKPageRef)>::fromCallable([completionHandler = WTFMove(completionHandler)](WKPageRef page) { >+ [m_delegate.get() _automationSession:wrapper(session) requestNewPageWithOptions:toAPI(options) completionHandler:BlockPtr<void(WKPageRef)>::fromCallable([completionHandler = WTFMove(completionHandler)](WKPageRef page) mutable { > completionHandler(toImpl(page)); > }).get()]; > } >@@ -107,7 +107,9 @@ void AutomationSessionClient::requestSwi > return; > } > >- auto completionBlock = BlockPtr<void()>::fromCallable([completionHandler = WTFMove(completionHandler)]() { completionHandler(); }); >+ auto completionBlock = BlockPtr<void()>::fromCallable([completionHandler = WTFMove(completionHandler)] () mutable { >+ completionHandler(); >+ }); > if (m_delegateMethods.requestSwitchToWebView) > [m_delegate.get() _automationSession:wrapper(session) requestSwitchToWebView:fromWebPageProxy(page) completionHandler:completionBlock.get()]; > else if (m_delegateMethods.requestSwitchToPage) >@@ -121,7 +123,9 @@ void AutomationSessionClient::requestHid > return; > } > >- auto completionBlock = BlockPtr<void()>::fromCallable([completionHandler = WTFMove(completionHandler)]() { completionHandler(); }); >+ auto completionBlock = BlockPtr<void()>::fromCallable([completionHandler = WTFMove(completionHandler)] () mutable { >+ completionHandler(); >+ }); > if (m_delegateMethods.requestHideWindowOfWebView) > [m_delegate.get() _automationSession:wrapper(session) requestHideWindowOfWebView:fromWebPageProxy(page) completionHandler:completionBlock.get()]; > else if (m_delegateMethods.requestHideWindowOfPage) >@@ -135,7 +139,9 @@ void AutomationSessionClient::requestRes > return; > } > >- auto completionBlock = BlockPtr<void()>::fromCallable([completionHandler = WTFMove(completionHandler)]() { completionHandler(); }); >+ auto completionBlock = BlockPtr<void()>::fromCallable([completionHandler = WTFMove(completionHandler)] () mutable { >+ completionHandler(); >+ }); > if (m_delegateMethods.requestRestoreWindowOfWebView) > [m_delegate.get() _automationSession:wrapper(session) requestRestoreWindowOfWebView:fromWebPageProxy(page) completionHandler:completionBlock.get()]; > else if (m_delegateMethods.requestRestoreWindowOfPage) >Index: Source/WebKit/UIProcess/Cocoa/UIDelegate.mm >=================================================================== >--- Source/WebKit/UIProcess/Cocoa/UIDelegate.mm (revision 232732) >+++ Source/WebKit/UIProcess/Cocoa/UIDelegate.mm (working copy) >@@ -192,7 +192,7 @@ void UIDelegate::ContextMenuClient::menu > > if (m_uiDelegate.m_delegateMethods.webViewGetContextMenuFromProposedMenuForElementUserInfoCompletionHandler) { > auto checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(_webView:getContextMenuFromProposedMenu:forElement:userInfo:completionHandler:)); >- [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView getContextMenuFromProposedMenu:menu forElement:contextMenuElementInfo.get() userInfo:userInfo ? static_cast<id <NSSecureCoding>>(userInfo->wrapper()) : nil completionHandler:BlockPtr<void(NSMenu *)>::fromCallable([completionHandler = WTFMove(completionHandler), checker = WTFMove(checker)] (NSMenu *menu) { >+ [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView getContextMenuFromProposedMenu:menu forElement:contextMenuElementInfo.get() userInfo:userInfo ? static_cast<id <NSSecureCoding>>(userInfo->wrapper()) : nil completionHandler:BlockPtr<void(NSMenu *)>::fromCallable([completionHandler = WTFMove(completionHandler), checker = WTFMove(checker)] (NSMenu *menu) mutable { > if (checker->completionHandlerHasBeenCalled()) > return; > checker->didCallCompletionHandler(); >@@ -234,7 +234,7 @@ void UIDelegate::UIClient::createNewPage > if (m_uiDelegate.m_delegateMethods.webViewCreateWebViewWithConfigurationForNavigationActionWindowFeaturesAsync) { > auto checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(_webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:completionHandler:)); > >- [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView createWebViewWithConfiguration:configuration.get() forNavigationAction:wrapper(apiNavigationAction) windowFeatures:wrapper(apiWindowFeatures) completionHandler:BlockPtr<void (WKWebView *)>::fromCallable([completionHandler = WTFMove(completionHandler), checker = WTFMove(checker), relatedWebView = RetainPtr<WKWebView>(m_uiDelegate.m_webView)](WKWebView *webView) { >+ [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView createWebViewWithConfiguration:configuration.get() forNavigationAction:wrapper(apiNavigationAction) windowFeatures:wrapper(apiWindowFeatures) completionHandler:BlockPtr<void(WKWebView *)>::fromCallable([completionHandler = WTFMove(completionHandler), checker = WTFMove(checker), relatedWebView = RetainPtr<WKWebView>(m_uiDelegate.m_webView)] (WKWebView *webView) mutable { > if (checker->completionHandlerHasBeenCalled()) > return; > checker->didCallCompletionHandler(); >@@ -276,7 +276,7 @@ void UIDelegate::UIClient::runJavaScript > return; > } > >- RefPtr<CompletionHandlerCallChecker> checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:)); >+ auto checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:)); > [delegate webView:m_uiDelegate.m_webView runJavaScriptAlertPanelWithMessage:message initiatedByFrame:wrapper(API::FrameInfo::create(*webFrameProxy, securityOriginData.securityOrigin())) completionHandler:BlockPtr<void ()>::fromCallable([completionHandler = WTFMove(completionHandler), checker = WTFMove(checker)] { > if (checker->completionHandlerHasBeenCalled()) > return; >@@ -298,8 +298,8 @@ void UIDelegate::UIClient::runJavaScript > return; > } > >- RefPtr<CompletionHandlerCallChecker> checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:)); >- [delegate webView:m_uiDelegate.m_webView runJavaScriptConfirmPanelWithMessage:message initiatedByFrame:wrapper(API::FrameInfo::create(*webFrameProxy, securityOriginData.securityOrigin())) completionHandler:BlockPtr<void (BOOL)>::fromCallable([completionHandler = WTFMove(completionHandler), checker = WTFMove(checker)](BOOL result) { >+ auto checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:)); >+ [delegate webView:m_uiDelegate.m_webView runJavaScriptConfirmPanelWithMessage:message initiatedByFrame:wrapper(API::FrameInfo::create(*webFrameProxy, securityOriginData.securityOrigin())) completionHandler:BlockPtr<void (BOOL)>::fromCallable([completionHandler = WTFMove(completionHandler), checker = WTFMove(checker)] (BOOL result) mutable { > if (checker->completionHandlerHasBeenCalled()) > return; > completionHandler(result); >@@ -321,7 +321,7 @@ void UIDelegate::UIClient::runJavaScript > } > > auto checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler:)); >- [delegate webView:m_uiDelegate.m_webView runJavaScriptTextInputPanelWithPrompt:message defaultText:defaultValue initiatedByFrame:wrapper(API::FrameInfo::create(*webFrameProxy, securityOriginData.securityOrigin())) completionHandler:BlockPtr<void (NSString *)>::fromCallable([completionHandler = WTFMove(completionHandler), checker = WTFMove(checker)](NSString *result) { >+ [delegate webView:m_uiDelegate.m_webView runJavaScriptTextInputPanelWithPrompt:message defaultText:defaultValue initiatedByFrame:wrapper(API::FrameInfo::create(*webFrameProxy, securityOriginData.securityOrigin())) completionHandler:BlockPtr<void (NSString *)>::fromCallable([completionHandler = WTFMove(completionHandler), checker = WTFMove(checker)] (NSString *result) mutable { > if (checker->completionHandlerHasBeenCalled()) > return; > completionHandler(result); >@@ -343,7 +343,7 @@ void UIDelegate::UIClient::requestStorag > } > > auto checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(_webView:requestStorageAccessPanelForDomain:underCurrentDomain:completionHandler:)); >- [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView requestStorageAccessPanelForDomain:requestingDomain underCurrentDomain:currentDomain completionHandler:BlockPtr<void(BOOL)>::fromCallable([completionHandler = WTFMove(completionHandler), checker = WTFMove(checker)](BOOL result) { >+ [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView requestStorageAccessPanelForDomain:requestingDomain underCurrentDomain:currentDomain completionHandler:BlockPtr<void(BOOL)>::fromCallable([completionHandler = WTFMove(completionHandler), checker = WTFMove(checker)] (BOOL result) mutable { > if (checker->completionHandlerHasBeenCalled()) > return; > completionHandler(result); >@@ -361,7 +361,7 @@ void UIDelegate::UIClient::decidePolicyF > return; > > auto checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(_webView:requestGeolocationPermissionForFrame:decisionHandler:)); >- [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView requestGeolocationPermissionForFrame:wrapper(API::FrameInfo::create(frame, securityOrigin.securityOrigin())) decisionHandler:BlockPtr<void(BOOL)>::fromCallable([completionHandler = std::exchange(completionHandler, nullptr), checker = WTFMove(checker)](BOOL result) { >+ [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView requestGeolocationPermissionForFrame:wrapper(API::FrameInfo::create(frame, securityOrigin.securityOrigin())) decisionHandler:BlockPtr<void(BOOL)>::fromCallable([completionHandler = std::exchange(completionHandler, nullptr), checker = WTFMove(checker)] (BOOL result) mutable { > if (checker->completionHandlerHasBeenCalled()) > return; > checker->didCallCompletionHandler(); >@@ -400,7 +400,7 @@ void UIDelegate::UIClient::runBeforeUnlo > } > > auto checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(_webView:runBeforeUnloadConfirmPanelWithMessage:initiatedByFrame:completionHandler:)); >- [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView runBeforeUnloadConfirmPanelWithMessage:message initiatedByFrame:wrapper(API::FrameInfo::create(*webFrameProxy, securityOriginData.securityOrigin())) completionHandler:BlockPtr<void (BOOL)>::fromCallable([completionHandler = WTFMove(completionHandler), checker = WTFMove(checker)](BOOL result) { >+ [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView runBeforeUnloadConfirmPanelWithMessage:message initiatedByFrame:wrapper(API::FrameInfo::create(*webFrameProxy, securityOriginData.securityOrigin())) completionHandler:BlockPtr<void (BOOL)>::fromCallable([completionHandler = WTFMove(completionHandler), checker = WTFMove(checker)] (BOOL result) mutable { > if (checker->completionHandlerHasBeenCalled()) > return; > completionHandler(result); >@@ -793,7 +793,7 @@ void UIDelegate::UIClient::decidePolicyF > return completionHandler(false); > > auto checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(_webView:requestNotificationPermissionForSecurityOrigin:decisionHandler:)); >- [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView requestNotificationPermissionForSecurityOrigin:wrapper(securityOrigin) decisionHandler:BlockPtr<void(BOOL)>::fromCallable([completionHandler = WTFMove(completionHandler), checker = WTFMove(checker)](BOOL result) { >+ [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView requestNotificationPermissionForSecurityOrigin:wrapper(securityOrigin) decisionHandler:BlockPtr<void(BOOL)>::fromCallable([completionHandler = WTFMove(completionHandler), checker = WTFMove(checker)] (BOOL result) mutable { > if (checker->completionHandlerHasBeenCalled()) > return; > checker->didCallCompletionHandler(); >@@ -811,17 +811,16 @@ bool UIDelegate::UIClient::runOpenPanel( > return false; > > auto frame = API::FrameInfo::create(*webFrameProxy, securityOriginData.securityOrigin()); >- RefPtr<WebOpenPanelResultListenerProxy> resultListener = listener; > >- RefPtr<CompletionHandlerCallChecker> checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:)); >+ auto checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:)); > >- [delegate webView:m_uiDelegate.m_webView runOpenPanelWithParameters:wrapper(*openPanelParameters) initiatedByFrame:wrapper(frame) completionHandler:[checker, resultListener](NSArray *URLs) { >+ [delegate webView:m_uiDelegate.m_webView runOpenPanelWithParameters:wrapper(*openPanelParameters) initiatedByFrame:wrapper(frame) completionHandler:BlockPtr<void(NSArray *)>::fromCallable([checker = WTFMove(checker), listener = WTFMove(listener)] (NSArray *URLs) mutable { > if (checker->completionHandlerHasBeenCalled()) > return; > checker->didCallCompletionHandler(); > > if (!URLs) { >- resultListener->cancel(); >+ listener->cancel(); > return; > } > >@@ -829,8 +828,8 @@ bool UIDelegate::UIClient::runOpenPanel( > for (NSURL *url in URLs) > filenames.append(url.path); > >- resultListener->chooseFiles(filenames); >- }]; >+ listener->chooseFiles(filenames); >+ }).get()]; > > return true; > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 186543
:
342470
|
342483
|
342513
|
342567
|
342609
|
342635
|
345959