Changeset 215918 in webkit


Ignore:
Timestamp:
Apr 27, 2017 9:05:56 PM (7 years ago)
Author:
achristensen@apple.com
Message:

Make navigation policy checking more robust
https://bugs.webkit.org/show_bug.cgi?id=171409
<rdar://problem/31489248>

Reviewed by Geoffrey Garen.

No change in behavior. Just added a protectedThis to a lambda and made the functions non-copyable.

  • loader/DocumentLoader.cpp:

(WebCore::DocumentLoader::willSendRequest):

  • loader/PolicyCallback.cpp:

(WebCore::PolicyCallback::set):
(WebCore::PolicyCallback::clear): Deleted.

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

(WebCore::PolicyChecker::cancelCheck):
(WebCore::PolicyChecker::stopCheck):
(WebCore::PolicyChecker::continueAfterNavigationPolicy):
(WebCore::PolicyChecker::continueAfterNewWindowPolicy):
(WebCore::PolicyChecker::continueAfterContentPolicy):

Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r215917 r215918  
     12017-04-27  Alex Christensen  <achristensen@webkit.org>
     2
     3        Make navigation policy checking more robust
     4        https://bugs.webkit.org/show_bug.cgi?id=171409
     5        <rdar://problem/31489248>
     6
     7        Reviewed by Geoffrey Garen.
     8
     9        No change in behavior.  Just added a protectedThis to a lambda and made the functions non-copyable.
     10
     11        * loader/DocumentLoader.cpp:
     12        (WebCore::DocumentLoader::willSendRequest):
     13        * loader/PolicyCallback.cpp:
     14        (WebCore::PolicyCallback::set):
     15        (WebCore::PolicyCallback::clear): Deleted.
     16        * loader/PolicyCallback.h:
     17        * loader/PolicyChecker.cpp:
     18        (WebCore::PolicyChecker::cancelCheck):
     19        (WebCore::PolicyChecker::stopCheck):
     20        (WebCore::PolicyChecker::continueAfterNavigationPolicy):
     21        (WebCore::PolicyChecker::continueAfterNewWindowPolicy):
     22        (WebCore::PolicyChecker::continueAfterContentPolicy):
     23
    1242017-04-27  Wenson Hsieh  <wenson_hsieh@apple.com>
    225
  • trunk/Source/WebCore/loader/DocumentLoader.cpp

    r215160 r215918  
    568568    ASSERT(!m_waitingForNavigationPolicy);
    569569    m_waitingForNavigationPolicy = true;
    570     frameLoader()->policyChecker().checkNavigationPolicy(newRequest, didReceiveRedirectResponse, [this] (const ResourceRequest& request, FormState*, bool shouldContinue) {
     570    frameLoader()->policyChecker().checkNavigationPolicy(newRequest, didReceiveRedirectResponse, [this, protectedThis = makeRef(*this)] (const ResourceRequest& request, FormState*, bool shouldContinue) {
    571571        continueAfterNavigationPolicy(request, shouldContinue);
    572572    });
  • trunk/Source/WebCore/loader/PolicyCallback.cpp

    r210216 r215918  
    3939namespace WebCore {
    4040
    41 void PolicyCallback::clear()
    42 {
    43     clearRequest();
    44     m_navigationFunction = nullptr;
    45     m_newWindowFunction = nullptr;
    46     m_contentFunction = nullptr;
    47 }
    48 
    49 void PolicyCallback::set(const ResourceRequest& request, FormState* formState,
    50     NavigationPolicyDecisionFunction function)
     41void PolicyCallback::set(const ResourceRequest& request, FormState* formState, NavigationPolicyDecisionFunction&& function)
    5142{
    5243    m_request = request;
     
    5950}
    6051
    61 void PolicyCallback::set(const ResourceRequest& request, FormState* formState, const String& frameName, const NavigationAction& navigationAction, NewWindowPolicyDecisionFunction function)
     52void PolicyCallback::set(const ResourceRequest& request, FormState* formState, const String& frameName, const NavigationAction& navigationAction, NewWindowPolicyDecisionFunction&& function)
    6253{
    6354    m_request = request;
     
    7162}
    7263
    73 void PolicyCallback::set(ContentPolicyDecisionFunction function)
     64void PolicyCallback::set(ContentPolicyDecisionFunction&& function)
    7465{
    7566    m_request = ResourceRequest();
  • trunk/Source/WebCore/loader/PolicyCallback.h

    r210216 r215918  
    3434#include "ResourceRequest.h"
    3535#include <functional>
     36#include <wtf/Function.h>
    3637#include <wtf/RefPtr.h>
    3738#include <wtf/text/WTFString.h>
     
    4142class FormState;
    4243
    43 using ContentPolicyDecisionFunction = std::function<void(PolicyAction)>;
    44 using NavigationPolicyDecisionFunction = std::function<void(const ResourceRequest&, FormState*, bool shouldContinue)>;
    45 using NewWindowPolicyDecisionFunction = std::function<void(const ResourceRequest&, FormState*, const String& frameName, const NavigationAction&, bool shouldContinue)>;
     44using ContentPolicyDecisionFunction = Function<void(PolicyAction)>;
     45using NavigationPolicyDecisionFunction = Function<void(const ResourceRequest&, FormState*, bool shouldContinue)>;
     46using NewWindowPolicyDecisionFunction = Function<void(const ResourceRequest&, FormState*, const String& frameName, const NavigationAction&, bool shouldContinue)>;
    4647
    4748class PolicyCallback {
    4849public:
    49     void clear();
    50     void set(const ResourceRequest&, FormState*, NavigationPolicyDecisionFunction);
    51     void set(const ResourceRequest&, FormState*, const String& frameName, const NavigationAction&, NewWindowPolicyDecisionFunction);
    52     void set(ContentPolicyDecisionFunction);
     50    void set(const ResourceRequest&, FormState*, NavigationPolicyDecisionFunction&&);
     51    void set(const ResourceRequest&, FormState*, const String& frameName, const NavigationAction&, NewWindowPolicyDecisionFunction&&);
     52    void set(ContentPolicyDecisionFunction&&);
    5353
    5454    const ResourceRequest& request() const { return m_request; }
  • trunk/Source/WebCore/loader/PolicyChecker.cpp

    r213253 r215918  
    178178{
    179179    m_frame.loader().client().cancelPolicyCheck();
    180     m_callback.clear();
     180    m_callback = { };
    181181}
    182182
     
    184184{
    185185    m_frame.loader().client().cancelPolicyCheck();
    186     PolicyCallback callback = m_callback;
    187     m_callback.clear();
     186    PolicyCallback callback = WTFMove(m_callback);
    188187    callback.cancel();
    189188}
     
    203202void PolicyChecker::continueAfterNavigationPolicy(PolicyAction policy)
    204203{
    205     PolicyCallback callback = m_callback;
    206     m_callback.clear();
     204    PolicyCallback callback = WTFMove(m_callback);
    207205
    208206    bool shouldContinue = policy == PolicyUse;
     
    236234void PolicyChecker::continueAfterNewWindowPolicy(PolicyAction policy)
    237235{
    238     PolicyCallback callback = m_callback;
    239     m_callback.clear();
     236    PolicyCallback callback = WTFMove(m_callback);
    240237
    241238    switch (policy) {
     
    256253void PolicyChecker::continueAfterContentPolicy(PolicyAction policy)
    257254{
    258     PolicyCallback callback = m_callback;
    259     m_callback.clear();
     255    PolicyCallback callback = WTFMove(m_callback);
    260256    callback.call(policy);
    261257}
Note: See TracChangeset for help on using the changeset viewer.