Changeset 221162 in webkit


Ignore:
Timestamp:
Aug 24, 2017 2:45:38 PM (7 years ago)
Author:
commit-queue@webkit.org
Message:

Stop using PolicyCallback for new window policies
https://bugs.webkit.org/show_bug.cgi?id=175907

Patch by Alex Christensen <achristensen@webkit.org> on 2017-08-24
Reviewed by Andy Estes.

PolicyCallback is an artifact from the days before C++11. Let's use lambdas instead!
No change in behaviour.

  • loader/PolicyCallback.cpp:

(WebCore::PolicyCallback::set):
(WebCore::PolicyCallback::call):
(WebCore::PolicyCallback::cancel):

  • loader/PolicyCallback.h:
  • loader/PolicyChecker.cpp:

(WebCore::PolicyChecker::checkNewWindowPolicy):
(WebCore::PolicyChecker::continueAfterNewWindowPolicy): Deleted.

  • loader/PolicyChecker.h:
Location:
trunk/Source/WebCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r221160 r221162  
     12017-08-24  Alex Christensen  <achristensen@webkit.org>
     2
     3        Stop using PolicyCallback for new window policies
     4        https://bugs.webkit.org/show_bug.cgi?id=175907
     5
     6        Reviewed by Andy Estes.
     7
     8        PolicyCallback is an artifact from the days before C++11.  Let's use lambdas instead!
     9        No change in behaviour.
     10
     11        * loader/PolicyCallback.cpp:
     12        (WebCore::PolicyCallback::set):
     13        (WebCore::PolicyCallback::call):
     14        (WebCore::PolicyCallback::cancel):
     15        * loader/PolicyCallback.h:
     16        * loader/PolicyChecker.cpp:
     17        (WebCore::PolicyChecker::checkNewWindowPolicy):
     18        (WebCore::PolicyChecker::continueAfterNewWindowPolicy): Deleted.
     19        * loader/PolicyChecker.h:
     20
    1212017-08-24  Michael Saboff  <msaboff@apple.com>
    222
  • trunk/Source/WebCore/loader/FrameLoader.cpp

    r221122 r221162  
    12951295    if (!targetFrame && !frameName.isEmpty()) {
    12961296        action = action.copyWithShouldOpenExternalURLsPolicy(shouldOpenExternalURLsPolicyToApply(m_frame, frameLoadRequest));
    1297         policyChecker().checkNewWindowPolicy(action, request, formState, frameName, [this, allowNavigationToInvalidURL, openerPolicy] (const ResourceRequest& request, FormState* formState, const String& frameName, const NavigationAction& action, bool shouldContinue) {
     1297        policyChecker().checkNewWindowPolicy(WTFMove(action), request, formState, frameName, [this, allowNavigationToInvalidURL, openerPolicy] (const ResourceRequest& request, FormState* formState, const String& frameName, const NavigationAction& action, bool shouldContinue) {
    12981298            continueLoadAfterNewWindowPolicy(request, formState, frameName, action, shouldContinue, allowNavigationToInvalidURL, openerPolicy);
    12991299        });
     
    13651365    if (request.shouldCheckNewWindowPolicy()) {
    13661366        NavigationAction action { request.requester(), request.resourceRequest(), InitiatedByMainFrame::Unknown, NavigationType::Other, request.shouldOpenExternalURLsPolicy() };
    1367         policyChecker().checkNewWindowPolicy(action, request.resourceRequest(), nullptr, request.frameName(), [this] (const ResourceRequest& request, FormState* formState, const String& frameName, const NavigationAction& action, bool shouldContinue) {
     1367        policyChecker().checkNewWindowPolicy(WTFMove(action), request.resourceRequest(), nullptr, request.frameName(), [this] (const ResourceRequest& request, FormState* formState, const String& frameName, const NavigationAction& action, bool shouldContinue) {
    13681368            continueLoadAfterNewWindowPolicy(request, formState, frameName, action, shouldContinue, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Suppress);
    13691369        });
     
    27702770        }
    27712771
    2772         policyChecker().checkNewWindowPolicy(action, workingResourceRequest, WTFMove(formState), frameName, [this, allowNavigationToInvalidURL, openerPolicy] (const ResourceRequest& request, FormState* formState, const String& frameName, const NavigationAction& action, bool shouldContinue) {
     2772        policyChecker().checkNewWindowPolicy(WTFMove(action), workingResourceRequest, WTFMove(formState), frameName, [this, allowNavigationToInvalidURL, openerPolicy] (const ResourceRequest& request, FormState* formState, const String& frameName, const NavigationAction& action, bool shouldContinue) {
    27732773            continueLoadAfterNewWindowPolicy(request, formState, frameName, action, shouldContinue, allowNavigationToInvalidURL, openerPolicy);
    27742774        });
  • trunk/Source/WebCore/loader/PolicyCallback.cpp

    r221122 r221162  
    4646
    4747    m_navigationFunction = WTFMove(function);
    48     m_newWindowFunction = nullptr;
    49 }
    50 
    51 void PolicyCallback::set(const ResourceRequest& request, FormState* formState, const String& frameName, const NavigationAction& navigationAction, NewWindowPolicyDecisionFunction&& function)
    52 {
    53     m_request = request;
    54     m_formState = formState;
    55     m_frameName = frameName;
    56     m_navigationAction = navigationAction;
    57 
    58     m_navigationFunction = nullptr;
    59     m_newWindowFunction = WTFMove(function);
    6048}
    6149
     
    6452    if (m_navigationFunction)
    6553        m_navigationFunction(m_request, m_formState.get(), shouldContinue);
    66     if (m_newWindowFunction)
    67         m_newWindowFunction(m_request, m_formState.get(), m_frameName, m_navigationAction, shouldContinue);
    6854}
    6955
     
    8066    if (m_navigationFunction)
    8167        m_navigationFunction(m_request, m_formState.get(), false);
    82     if (m_newWindowFunction)
    83         m_newWindowFunction(m_request, m_formState.get(), m_frameName, m_navigationAction, false);
    8468}
    8569
  • trunk/Source/WebCore/loader/PolicyCallback.h

    r221122 r221162  
    4343
    4444using NavigationPolicyDecisionFunction = Function<void(const ResourceRequest&, FormState*, bool shouldContinue)>;
    45 using NewWindowPolicyDecisionFunction = Function<void(const ResourceRequest&, FormState*, const String& frameName, const NavigationAction&, bool shouldContinue)>;
    4645
    4746class PolicyCallback {
    4847public:
    4948    void set(const ResourceRequest&, FormState*, NavigationPolicyDecisionFunction&&);
    50     void set(const ResourceRequest&, FormState*, const String& frameName, const NavigationAction&, NewWindowPolicyDecisionFunction&&);
    5149
    5250    const ResourceRequest& request() const { return m_request; }
     
    6361
    6462    NavigationPolicyDecisionFunction m_navigationFunction;
    65     NewWindowPolicyDecisionFunction m_newWindowFunction;
    6663};
    6764
  • trunk/Source/WebCore/loader/PolicyChecker.cpp

    r221122 r221162  
    154154}
    155155
    156 void PolicyChecker::checkNewWindowPolicy(const NavigationAction& action, const ResourceRequest& request, FormState* formState, const String& frameName, NewWindowPolicyDecisionFunction function)
     156void PolicyChecker::checkNewWindowPolicy(NavigationAction&& navigationAction, const ResourceRequest& request, FormState* formState, const String& frameName, NewWindowPolicyDecisionFunction function)
    157157{
    158158    if (m_frame.document() && m_frame.document()->isSandboxed(SandboxPopups))
     
    162162        return continueAfterNavigationPolicy(PolicyIgnore);
    163163
    164     m_callback.set(request, formState, frameName, action, WTFMove(function));
    165     m_frame.loader().client().dispatchDecidePolicyForNewWindowAction(action, request, formState, frameName, [this](PolicyAction action) {
    166         continueAfterNewWindowPolicy(action);
     164    m_frame.loader().client().dispatchDecidePolicyForNewWindowAction(navigationAction, request, formState, frameName, [frame = makeRef(m_frame), request, formState = makeRefPtr(formState), frameName, navigationAction, function = WTFMove(function)](PolicyAction policyAction) {
     165        switch (policyAction) {
     166        case PolicyDownload:
     167            frame->loader().client().startDownload(request);
     168            FALLTHROUGH;
     169        case PolicyIgnore:
     170            function({ }, nullptr, { }, { }, false);
     171            return;
     172        case PolicyUse:
     173            function(request, formState.get(), frameName, navigationAction, true);
     174            return;
     175        }
     176        ASSERT_NOT_REACHED();
    167177    });
    168178}
     
    225235}
    226236
    227 void PolicyChecker::continueAfterNewWindowPolicy(PolicyAction policy)
    228 {
    229     PolicyCallback callback = WTFMove(m_callback);
    230 
    231     switch (policy) {
    232         case PolicyIgnore:
    233             callback.clearRequest();
    234             break;
    235         case PolicyDownload:
    236             m_frame.loader().client().startDownload(callback.request());
    237             callback.clearRequest();
    238             break;
    239         case PolicyUse:
    240             break;
    241     }
    242 
    243     callback.call(policy == PolicyUse);
    244 }
    245 
    246237void PolicyChecker::handleUnimplementablePolicy(const ResourceError& error)
    247238{
  • trunk/Source/WebCore/loader/PolicyChecker.h

    r221122 r221162  
    4848class ResourceResponse;
    4949
     50using NewWindowPolicyDecisionFunction = WTF::Function<void(const ResourceRequest&, FormState*, const String& frameName, const NavigationAction&, bool shouldContinue)>;
     51
    5052class PolicyChecker {
    5153    WTF_MAKE_NONCOPYABLE(PolicyChecker);
     
    5658    void checkNavigationPolicy(const ResourceRequest&, bool didReceiveRedirectResponse, DocumentLoader*, FormState*, NavigationPolicyDecisionFunction);
    5759    void checkNavigationPolicy(const ResourceRequest&, bool didReceiveRedirectResponse, NavigationPolicyDecisionFunction);
    58     void checkNewWindowPolicy(const NavigationAction&, const ResourceRequest&, FormState*, const String& frameName, NewWindowPolicyDecisionFunction);
     60    void checkNewWindowPolicy(NavigationAction&&, const ResourceRequest&, FormState*, const String& frameName, NewWindowPolicyDecisionFunction);
    5961
    6062    // FIXME: These are different.  They could use better names.
     
    8587private:
    8688    void continueAfterNavigationPolicy(PolicyAction);
    87     void continueAfterNewWindowPolicy(PolicyAction);
    8889
    8990    void handleUnimplementablePolicy(const ResourceError&);
Note: See TracChangeset for help on using the changeset viewer.