Changeset 232093 in webkit
- Timestamp:
- May 22, 2018 5:17:45 PM (6 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r232090 r232093 1 2018-05-22 Commit Queue <commit-queue@webkit.org> 2 3 Unreviewed, rolling out r232081. 4 https://bugs.webkit.org/show_bug.cgi?id=185895 5 6 Broke two API tests (Requested by bfulgham_ on #webkit). 7 8 Reverted changeset: 9 10 "Avoid keeping FormState alive longer than necessary" 11 https://bugs.webkit.org/show_bug.cgi?id=185877 12 https://trac.webkit.org/changeset/232081 13 1 14 2018-05-22 Dean Jackson <dino@apple.com> 2 15 -
trunk/Source/WebCore/loader/DocumentLoader.cpp
r232081 r232093 1 1 /* 2 * Copyright (C) 2006-201 8Apple Inc. All rights reserved.2 * Copyright (C) 2006-2017 Apple Inc. All rights reserved. 3 3 * Copyright (C) 2011 Google Inc. All rights reserved. 4 4 * … … 641 641 return completionHandler(WTFMove(newRequest)); 642 642 643 auto navigationPolicyCompletionHandler = [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)] (ResourceRequest&& request, WeakPtr<FormState>&&, ShouldContinue shouldContinue) mutable {643 auto navigationPolicyCompletionHandler = [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)] (ResourceRequest&& request, FormState*, ShouldContinue shouldContinue) mutable { 644 644 m_waitingForNavigationPolicy = false; 645 645 switch (shouldContinue) { -
trunk/Source/WebCore/loader/FormState.cpp
r232081 r232093 1 1 /* 2 * Copyright (C) 2006-201 8Apple Inc. All rights reserved.2 * Copyright (C) 2006-2017 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 53 53 { 54 54 // Beartrap for <rdar://problem/37579354> 55 RELEASE_ASSERT (hasOneRef());55 RELEASE_ASSERT_NOT_REACHED(); 56 56 } 57 57 -
trunk/Source/WebCore/loader/FormState.h
r232081 r232093 1 1 /* 2 * Copyright (C) 2006-201 8Apple Inc. All rights reserved.2 * Copyright (C) 2006-2017 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 30 30 31 31 #include "FrameDestructionObserver.h" 32 #include <wtf/WeakPtr.h>33 32 #include <wtf/text/WTFString.h> 34 33 … … 51 50 FormSubmissionTrigger formSubmissionTrigger() const { return m_formSubmissionTrigger; } 52 51 53 auto& weakPtrFactory() const { return m_weakFactory; }54 55 52 private: 56 53 FormState(HTMLFormElement&, StringPairVector&& textFieldValues, Document&, FormSubmissionTrigger); … … 61 58 Ref<Document> m_sourceDocument; 62 59 FormSubmissionTrigger m_formSubmissionTrigger; 63 WeakPtrFactory<FormState> m_weakFactory;64 60 }; 65 61 -
trunk/Source/WebCore/loader/FrameLoader.cpp
r232090 r232093 1 1 /* 2 * Copyright (C) 2006-201 8Apple Inc. All rights reserved.2 * Copyright (C) 2006-2016 Apple Inc. All rights reserved. 3 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 4 4 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) … … 1229 1229 loadType = FrameLoadType::Standard; 1230 1230 1231 auto completionHandler = [this, protectedFrame = makeRef(m_frame), formState = make WeakPtr(formState), frameName = request.frameName()] {1231 auto completionHandler = [this, protectedFrame = makeRef(m_frame), formState = makeRefPtr(formState), frameName = request.frameName()] { 1232 1232 // FIXME: It's possible this targetFrame will not be the same frame that was targeted by the actual 1233 1233 // load if frame names have changed. … … 1339 1339 if (!targetFrame && !frameName.isEmpty()) { 1340 1340 action = action.copyWithShouldOpenExternalURLsPolicy(shouldOpenExternalURLsPolicyToApply(m_frame, frameLoadRequest)); 1341 policyChecker().checkNewWindowPolicy(WTFMove(action), WTFMove(request), formState, frameName, [this, allowNavigationToInvalidURL, openerPolicy, completionHandler = completionHandlerCaller.release()] (const ResourceRequest& request, WeakPtr<FormState>&&formState, const String& frameName, const NavigationAction& action, ShouldContinue shouldContinue) {1342 continueLoadAfterNewWindowPolicy(request, formState .get(), frameName, action, shouldContinue, allowNavigationToInvalidURL, openerPolicy);1341 policyChecker().checkNewWindowPolicy(WTFMove(action), WTFMove(request), formState, frameName, [this, allowNavigationToInvalidURL, openerPolicy, completionHandler = completionHandlerCaller.release()] (const ResourceRequest& request, FormState* formState, const String& frameName, const NavigationAction& action, ShouldContinue shouldContinue) { 1342 continueLoadAfterNewWindowPolicy(request, formState, frameName, action, shouldContinue, allowNavigationToInvalidURL, openerPolicy); 1343 1343 completionHandler(); 1344 1344 }); … … 1359 1359 policyChecker().stopCheck(); 1360 1360 policyChecker().setLoadType(newLoadType); 1361 policyChecker().checkNavigationPolicy(WTFMove(request), false /* didReceiveRedirectResponse */, oldDocumentLoader.get(), formState, [this, protectedFrame = makeRef(m_frame)] (const ResourceRequest& request, WeakPtr<FormState>&&, ShouldContinue shouldContinue) {1361 policyChecker().checkNavigationPolicy(WTFMove(request), false /* didReceiveRedirectResponse */, oldDocumentLoader.get(), formState, [this, protectedFrame = makeRef(m_frame)] (const ResourceRequest& request, FormState*, ShouldContinue shouldContinue) { 1362 1362 continueFragmentScrollAfterNavigationPolicy(request, shouldContinue == ShouldContinue::Yes); 1363 1363 }, PolicyDecisionMode::Synchronous); … … 1420 1420 if (request.shouldCheckNewWindowPolicy()) { 1421 1421 NavigationAction action { request.requester(), request.resourceRequest(), InitiatedByMainFrame::Unknown, NavigationType::Other, request.shouldOpenExternalURLsPolicy() }; 1422 policyChecker().checkNewWindowPolicy(WTFMove(action), WTFMove(request.resourceRequest()), nullptr, request.frameName(), [this] (const ResourceRequest& request, WeakPtr<FormState>&&formState, const String& frameName, const NavigationAction& action, ShouldContinue shouldContinue) {1423 continueLoadAfterNewWindowPolicy(request, formState .get(), frameName, action, shouldContinue, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Suppress);1422 policyChecker().checkNewWindowPolicy(WTFMove(action), WTFMove(request.resourceRequest()), nullptr, request.frameName(), [this] (const ResourceRequest& request, FormState* formState, const String& frameName, const NavigationAction& action, ShouldContinue shouldContinue) { 1423 continueLoadAfterNewWindowPolicy(request, formState, frameName, action, shouldContinue, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Suppress); 1424 1424 }); 1425 1425 … … 1534 1534 oldDocumentLoader->setLastCheckedRequest(ResourceRequest()); 1535 1535 policyChecker().stopCheck(); 1536 policyChecker().checkNavigationPolicy(ResourceRequest(loader->request()), false /* didReceiveRedirectResponse */, oldDocumentLoader.get(), formState, [this, protectedFrame = makeRef(m_frame)] (const ResourceRequest& request, WeakPtr<FormState>&&, ShouldContinue shouldContinue) {1536 policyChecker().checkNavigationPolicy(ResourceRequest(loader->request()), false /* didReceiveRedirectResponse */, oldDocumentLoader.get(), formState, [this, protectedFrame = makeRef(m_frame)] (const ResourceRequest& request, FormState*, ShouldContinue shouldContinue) { 1537 1537 continueFragmentScrollAfterNavigationPolicy(request, shouldContinue == ShouldContinue::Yes); 1538 1538 }, PolicyDecisionMode::Synchronous); … … 1568 1568 } 1569 1569 1570 policyChecker().checkNavigationPolicy(ResourceRequest(loader->request()), false /* didReceiveRedirectResponse */, loader, formState, [this, protectedFrame = makeRef(m_frame), allowNavigationToInvalidURL, completionHandler = completionHandlerCaller.release()] (const ResourceRequest& request, WeakPtr<FormState>&&formState, ShouldContinue shouldContinue) {1571 continueLoadAfterNavigationPolicy(request, formState .get(), shouldContinue, allowNavigationToInvalidURL);1570 policyChecker().checkNavigationPolicy(ResourceRequest(loader->request()), false /* didReceiveRedirectResponse */, loader, formState, [this, protectedFrame = makeRef(m_frame), allowNavigationToInvalidURL, completionHandler = completionHandlerCaller.release()] (const ResourceRequest& request, FormState* formState, ShouldContinue shouldContinue) { 1571 continueLoadAfterNavigationPolicy(request, formState, shouldContinue, allowNavigationToInvalidURL); 1572 1572 completionHandler(); 1573 1573 }); … … 2862 2862 if (!frameName.isEmpty()) { 2863 2863 // The search for a target frame is done earlier in the case of form submission. 2864 if ( auto* targetFrame = formState ? nullptr: findFrameForNavigation(frameName)) {2865 targetFrame->loader().loadWithNavigationAction(workingResourceRequest, action, lockHistory, loadType, formState, allowNavigationToInvalidURL, WTFMove(completionHandler));2864 if (Frame* targetFrame = formState ? 0 : findFrameForNavigation(frameName)) { 2865 targetFrame->loader().loadWithNavigationAction(workingResourceRequest, action, lockHistory, loadType, WTFMove(formState), allowNavigationToInvalidURL, WTFMove(completionHandler)); 2866 2866 return; 2867 2867 } 2868 2868 2869 policyChecker().checkNewWindowPolicy(WTFMove(action), WTFMove(workingResourceRequest), formState, frameName, [this, allowNavigationToInvalidURL, openerPolicy, completionHandler = WTFMove(completionHandler)] (const ResourceRequest& request, WeakPtr<FormState>&&formState, const String& frameName, const NavigationAction& action, ShouldContinue shouldContinue) {2870 continueLoadAfterNewWindowPolicy(request, formState .get(), frameName, action, shouldContinue, allowNavigationToInvalidURL, openerPolicy);2869 policyChecker().checkNewWindowPolicy(WTFMove(action), WTFMove(workingResourceRequest), WTFMove(formState), frameName, [this, allowNavigationToInvalidURL, openerPolicy, completionHandler = WTFMove(completionHandler)] (const ResourceRequest& request, FormState* formState, const String& frameName, const NavigationAction& action, ShouldContinue shouldContinue) { 2870 continueLoadAfterNewWindowPolicy(request, formState, frameName, action, shouldContinue, allowNavigationToInvalidURL, openerPolicy); 2871 2871 completionHandler(); 2872 2872 }); … … 2876 2876 // must grab this now, since this load may stop the previous load and clear this flag 2877 2877 bool isRedirect = m_quickRedirectComing; 2878 loadWithNavigationAction(workingResourceRequest, action, lockHistory, loadType, formState, allowNavigationToInvalidURL, [this, isRedirect, protectedFrame = makeRef(m_frame), completionHandler = WTFMove(completionHandler)] {2878 loadWithNavigationAction(workingResourceRequest, action, lockHistory, loadType, WTFMove(formState), allowNavigationToInvalidURL, [this, isRedirect, protectedFrame = makeRef(m_frame), completionHandler = WTFMove(completionHandler)] { 2879 2879 if (isRedirect) { 2880 2880 m_quickRedirectComing = false; -
trunk/Source/WebCore/loader/PolicyChecker.cpp
r232081 r232093 1 1 /* 2 * Copyright (C) 2006-201 8Apple Inc. All rights reserved.2 * Copyright (C) 2006-2016 Apple Inc. All rights reserved. 3 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 4 4 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) … … 110 110 // This avoids confusion on the part of the client. 111 111 if (equalIgnoringHeaderFields(request, loader->lastCheckedRequest()) || (!request.isNull() && request.url().isEmpty())) { 112 function(ResourceRequest(request), { }, ShouldContinue::Yes);112 function(ResourceRequest(request), nullptr, ShouldContinue::Yes); 113 113 loader->setLastCheckedRequest(WTFMove(request)); 114 114 return; … … 125 125 if (isBackForwardLoadType(m_loadType)) 126 126 m_loadType = FrameLoadType::Reload; 127 function(WTFMove(request), { }, shouldContinue ? ShouldContinue::Yes : ShouldContinue::No);127 function(WTFMove(request), nullptr, shouldContinue ? ShouldContinue::Yes : ShouldContinue::No); 128 128 return; 129 129 } … … 135 135 m_frame.ownerElement()->dispatchEvent(Event::create(eventNames().loadEvent, false, false)); 136 136 } 137 function(WTFMove(request), { }, ShouldContinue::No);137 function(WTFMove(request), nullptr, ShouldContinue::No); 138 138 return; 139 139 } … … 148 148 // Always allow QuickLook-generated URLs based on the protocol scheme. 149 149 if (!request.isNull() && isQuickLookPreviewURL(request.url())) 150 return function(WTFMove(request), makeWeakPtr(formState), ShouldContinue::Yes);150 return function(WTFMove(request), formState, ShouldContinue::Yes); 151 151 #endif 152 152 … … 169 169 m_delegateIsDecidingNavigationPolicy = true; 170 170 String suggestedFilename = action.downloadAttribute().isEmpty() ? nullAtom() : action.downloadAttribute(); 171 m_frame.loader().client().dispatchDecidePolicyForNavigationAction(action, request, didReceiveRedirectResponse, formState, policyDecisionMode, [this, function = WTFMove(function), request = ResourceRequest(request), formState = make WeakPtr(formState), suggestedFilename = WTFMove(suggestedFilename), blobURLLifetimeExtension = WTFMove(blobURLLifetimeExtension)](PolicyAction policyAction) mutable {171 m_frame.loader().client().dispatchDecidePolicyForNavigationAction(action, request, didReceiveRedirectResponse, formState, policyDecisionMode, [this, function = WTFMove(function), request = ResourceRequest(request), formState = makeRefPtr(formState), suggestedFilename = WTFMove(suggestedFilename), blobURLLifetimeExtension = WTFMove(blobURLLifetimeExtension)](PolicyAction policyAction) mutable { 172 172 m_delegateIsDecidingNavigationPolicy = false; 173 173 … … 186 186 return function({ }, nullptr, ShouldContinue::No); 187 187 } 188 return function(WTFMove(request), WTFMove(formState), ShouldContinue::Yes);188 return function(WTFMove(request), formState.get(), ShouldContinue::Yes); 189 189 } 190 190 ASSERT_NOT_REACHED(); … … 202 202 auto blobURLLifetimeExtension = extendBlobURLLifetimeIfNecessary(request); 203 203 204 m_frame.loader().client().dispatchDecidePolicyForNewWindowAction(navigationAction, request, formState, frameName, [frame = makeRef(m_frame), request, formState = make WeakPtr(formState), frameName, navigationAction, function = WTFMove(function), blobURLLifetimeExtension = WTFMove(blobURLLifetimeExtension)](PolicyAction policyAction) mutable {204 m_frame.loader().client().dispatchDecidePolicyForNewWindowAction(navigationAction, request, formState, frameName, [frame = makeRef(m_frame), request, formState = makeRefPtr(formState), frameName, navigationAction, function = WTFMove(function), blobURLLifetimeExtension = WTFMove(blobURLLifetimeExtension)](PolicyAction policyAction) mutable { 205 205 switch (policyAction) { 206 206 case PolicyAction::Download: … … 214 214 RELEASE_ASSERT_NOT_REACHED(); 215 215 case PolicyAction::Use: 216 function(request, WTFMove(formState), frameName, navigationAction, ShouldContinue::Yes);216 function(request, formState.get(), frameName, navigationAction, ShouldContinue::Yes); 217 217 return; 218 218 } -
trunk/Source/WebCore/loader/PolicyChecker.h
r232081 r232093 1 1 /* 2 * Copyright (C) 2006-201 8Apple Inc. All rights reserved.2 * Copyright (C) 2006-2016 Apple Inc. All rights reserved. 3 3 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) 4 4 * … … 32 32 #include "FrameLoaderTypes.h" 33 33 #include "ResourceRequest.h" 34 #include <wtf/WeakPtr.h>35 34 #include <wtf/text/WTFString.h> 36 35 … … 61 60 enum class PolicyDecisionMode { Synchronous, Asynchronous }; 62 61 63 using NewWindowPolicyDecisionFunction = CompletionHandler<void(const ResourceRequest&, WeakPtr<FormState>&&, const String& frameName, const NavigationAction&, ShouldContinue)>;64 using NavigationPolicyDecisionFunction = CompletionHandler<void(ResourceRequest&&, WeakPtr<FormState>&&, ShouldContinue)>;62 using NewWindowPolicyDecisionFunction = CompletionHandler<void(const ResourceRequest&, FormState*, const String& frameName, const NavigationAction&, ShouldContinue)>; 63 using NavigationPolicyDecisionFunction = CompletionHandler<void(ResourceRequest&&, FormState*, ShouldContinue)>; 65 64 66 65 class PolicyChecker {
Note: See TracChangeset
for help on using the changeset viewer.