⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 236129 in webkit


Ignore:
Timestamp:
Sep 18, 2018, 8:39:15 AM (8 years ago)
Author:
Carlos Garcia Campos
Message:

Merge r235562 - Assertion hit in ~CompletionHandler() from ~WebFrame()
https://bugs.webkit.org/show_bug.cgi?id=189199
<rdar://problem/42657233>

Reviewed by Youenn Fablet.

Source/WebCore:

The issue was caused by WebFrame::m_willSubmitFormCompletionHandlers implicitly containing
CompletionHandlers (wrapped in WTF::Functions) and not calling them upon WebFrame
destruction.

No new tests, covered by fast/frames/iframe-target.html.

  • loader/EmptyClients.cpp:

(WebCore::EmptyFrameLoaderClient::dispatchWillSubmitForm):

  • loader/EmptyFrameLoaderClient.h:
  • loader/FrameLoaderClient.h:

Source/WebKit:

  • WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:

(WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):

  • WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
  • WebProcess/WebPage/WebFrame.cpp:

(WebKit::WebFrame::~WebFrame):
(WebKit::WebFrame::setUpWillSubmitFormListener):
(WebKit::WebFrame::invalidatePolicyListener):

  • WebProcess/WebPage/WebFrame.h:

Source/WebKitLegacy/mac:

  • WebCoreSupport/WebFrameLoaderClient.h:
  • WebCoreSupport/WebFrameLoaderClient.mm:

(WebFrameLoaderClient::dispatchWillSubmitForm):

Source/WebKitLegacy/win:

  • WebCoreSupport/WebFrameLoaderClient.cpp:

(WebFrameLoaderClient::dispatchWillSubmitForm):

  • WebCoreSupport/WebFrameLoaderClient.h:
Location:
releases/WebKitGTK/webkit-2.22/Source
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • releases/WebKitGTK/webkit-2.22/Source/WebCore/ChangeLog

    r236120 r236129  
     12018-08-31  Chris Dumez  <cdumez@apple.com>
     2
     3        Assertion hit in ~CompletionHandler() from ~WebFrame()
     4        https://bugs.webkit.org/show_bug.cgi?id=189199
     5        <rdar://problem/42657233>
     6
     7        Reviewed by Youenn Fablet.
     8
     9        The issue was caused by WebFrame::m_willSubmitFormCompletionHandlers implicitly containing
     10        CompletionHandlers (wrapped in WTF::Functions) and not calling them upon WebFrame
     11        destruction.
     12
     13        No new tests, covered by fast/frames/iframe-target.html.
     14
     15        * loader/EmptyClients.cpp:
     16        (WebCore::EmptyFrameLoaderClient::dispatchWillSubmitForm):
     17        * loader/EmptyFrameLoaderClient.h:
     18        * loader/FrameLoaderClient.h:
     19
    1202018-08-30  Zalan Bujtas  <zalan@apple.com>
    221
  • releases/WebKitGTK/webkit-2.22/Source/WebCore/loader/EmptyClients.cpp

    r235299 r236129  
    455455}
    456456
    457 void EmptyFrameLoaderClient::dispatchWillSubmitForm(FormState&, WTF::Function<void(void)>&&)
    458 {
     457void EmptyFrameLoaderClient::dispatchWillSubmitForm(FormState&, CompletionHandler<void()>&& completionHandler)
     458{
     459    completionHandler();
    459460}
    460461
  • releases/WebKitGTK/webkit-2.22/Source/WebCore/loader/EmptyFrameLoaderClient.h

    r232814 r236129  
    102102
    103103    void dispatchWillSendSubmitEvent(Ref<FormState>&&) final;
    104     void dispatchWillSubmitForm(FormState&, WTF::Function<void(void)>&&) final;
     104    void dispatchWillSubmitForm(FormState&, CompletionHandler<void()>&&) final;
    105105
    106106    void revertToProvisionalState(DocumentLoader*) final { }
  • releases/WebKitGTK/webkit-2.22/Source/WebCore/loader/FrameLoader.cpp

    r235300 r236129  
    33383338    }
    33393339
    3340     CompletionHandler<void(void)> completionHandler = [this, shouldContinue] {
     3340    CompletionHandler<void()> completionHandler = [this, shouldContinue] {
    33413341        if (!m_provisionalDocumentLoader)
    33423342            return;
  • releases/WebKitGTK/webkit-2.22/Source/WebCore/loader/FrameLoaderClient.h

    r233782 r236129  
    198198
    199199    virtual void dispatchWillSendSubmitEvent(Ref<FormState>&&) = 0;
    200     virtual void dispatchWillSubmitForm(FormState&, WTF::Function<void(void)>&&) = 0;
     200    virtual void dispatchWillSubmitForm(FormState&, CompletionHandler<void()>&&) = 0;
    201201
    202202    virtual void revertToProvisionalState(DocumentLoader*) = 0;
  • releases/WebKitGTK/webkit-2.22/Source/WebKit/ChangeLog

    r236118 r236129  
     12018-08-31  Chris Dumez  <cdumez@apple.com>
     2
     3        Assertion hit in ~CompletionHandler() from ~WebFrame()
     4        https://bugs.webkit.org/show_bug.cgi?id=189199
     5        <rdar://problem/42657233>
     6
     7        Reviewed by Youenn Fablet.
     8
     9        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
     10        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):
     11        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
     12        * WebProcess/WebPage/WebFrame.cpp:
     13        (WebKit::WebFrame::~WebFrame):
     14        (WebKit::WebFrame::setUpWillSubmitFormListener):
     15        (WebKit::WebFrame::invalidatePolicyListener):
     16        * WebProcess/WebPage/WebFrame.h:
     17
    1182018-08-30  Tim Horton  <timothy_horton@apple.com>
    219
  • releases/WebKitGTK/webkit-2.22/Source/WebKit/UIProcess/WebFormSubmissionListenerProxy.h

    r234009 r236129  
    3333class WebFormSubmissionListenerProxy : public API::ObjectImpl<API::Object::Type::FormSubmissionListener> {
    3434public:
    35     static Ref<WebFormSubmissionListenerProxy> create(CompletionHandler<void(void)>&& completionHandler)
     35    static Ref<WebFormSubmissionListenerProxy> create(CompletionHandler<void()>&& completionHandler)
    3636    {
    3737        return adoptRef(*new WebFormSubmissionListenerProxy(WTFMove(completionHandler)));
     
    4141
    4242private:
    43     WebFormSubmissionListenerProxy(CompletionHandler<void(void)>&& completionHandler)
     43    WebFormSubmissionListenerProxy(CompletionHandler<void()>&& completionHandler)
    4444        : m_completionHandler(WTFMove(completionHandler))
    4545    { }
    46     CompletionHandler<void(void)> m_completionHandler;
     46    CompletionHandler<void()> m_completionHandler;
    4747};
    4848
  • releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp

    r236041 r236129  
    941941}
    942942
    943 void WebFrameLoaderClient::dispatchWillSubmitForm(FormState& formState, WTF::Function<void(void)>&& function)
    944 {
    945     WebPage* webPage = m_frame->page();
    946     if (!webPage)
    947         return;
     943void WebFrameLoaderClient::dispatchWillSubmitForm(FormState& formState, CompletionHandler<void()>&& completionHandler)
     944{
     945    WebPage* webPage = m_frame->page();
     946    if (!webPage) {
     947        completionHandler();
     948        return;
     949    }
    948950
    949951    auto& form = formState.form();
     
    959961    webPage->injectedBundleFormClient().willSubmitForm(webPage, &form, m_frame, sourceFrame, values, userData);
    960962
    961     uint64_t listenerID = m_frame->setUpWillSubmitFormListener(WTFMove(function));
     963    uint64_t listenerID = m_frame->setUpWillSubmitFormListener(WTFMove(completionHandler));
    962964
    963965    webPage->send(Messages::WebPageProxy::WillSubmitForm(m_frame->frameID(), sourceFrame->frameID(), values, listenerID, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get())));
  • releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.h

    r233782 r236129  
    132132   
    133133    void dispatchWillSendSubmitEvent(Ref<WebCore::FormState>&&) final;
    134     void dispatchWillSubmitForm(WebCore::FormState&, WTF::Function<void(void)>&&) final;
     134    void dispatchWillSubmitForm(WebCore::FormState&, CompletionHandler<void()>&&) final;
    135135   
    136136    void revertToProvisionalState(WebCore::DocumentLoader*) final;
  • releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/WebFrame.cpp

    r236041 r236129  
    164164    ASSERT(!m_coreFrame);
    165165
     166    auto willSubmitFormCompletionHandlers = WTFMove(m_willSubmitFormCompletionHandlers);
     167    for (auto& completionHandler : willSubmitFormCompletionHandlers.values())
     168        completionHandler();
     169
    166170#ifndef NDEBUG
    167171    webFrameCounter.decrement();
     
    220224}
    221225
    222 uint64_t WebFrame::setUpWillSubmitFormListener(WTF::Function<void(void)>&& completionHandler)
     226uint64_t WebFrame::setUpWillSubmitFormListener(CompletionHandler<void()>&& completionHandler)
    223227{
    224228    uint64_t identifier = generateListenerID();
     
    245249        function(PolicyAction::Ignore);
    246250    m_policyFunctionForNavigationAction = ForNavigationAction::No;
    247     for (auto& function : m_willSubmitFormCompletionHandlers.values())
    248         function();
    249     m_willSubmitFormCompletionHandlers.clear();
     251
     252    auto willSubmitFormCompletionHandlers = WTFMove(m_willSubmitFormCompletionHandlers);
     253    for (auto& completionHandler : willSubmitFormCompletionHandlers.values())
     254        completionHandler();
    250255}
    251256
  • releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/WebFrame.h

    r231479 r236129  
    9090    void didReceivePolicyDecision(uint64_t listenerID, WebCore::PolicyAction, uint64_t navigationID, DownloadID, std::optional<WebsitePoliciesData>&&);
    9191
    92     uint64_t setUpWillSubmitFormListener(WTF::Function<void(void)>&&);
     92    uint64_t setUpWillSubmitFormListener(CompletionHandler<void()>&&);
    9393    void continueWillSubmitForm(uint64_t);
    9494
     
    184184    WebCore::FramePolicyFunction m_policyFunction;
    185185    ForNavigationAction m_policyFunctionForNavigationAction { ForNavigationAction::No };
    186     HashMap<uint64_t, WTF::Function<void(void)>> m_willSubmitFormCompletionHandlers;
     186    HashMap<uint64_t, CompletionHandler<void()>> m_willSubmitFormCompletionHandlers;
    187187    DownloadID m_policyDownloadID { 0 };
    188188
  • releases/WebKitGTK/webkit-2.22/Source/WebKitLegacy/mac/ChangeLog

    r236045 r236129  
     12018-08-31  Chris Dumez  <cdumez@apple.com>
     2
     3        Assertion hit in ~CompletionHandler() from ~WebFrame()
     4        https://bugs.webkit.org/show_bug.cgi?id=189199
     5        <rdar://problem/42657233>
     6
     7        Reviewed by Youenn Fablet.
     8
     9        * WebCoreSupport/WebFrameLoaderClient.h:
     10        * WebCoreSupport/WebFrameLoaderClient.mm:
     11        (WebFrameLoaderClient::dispatchWillSubmitForm):
     12
    1132018-08-23  Mark Lam  <mark.lam@apple.com>
    214
  • releases/WebKitGTK/webkit-2.22/Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.h

    r232814 r236129  
    135135
    136136    void dispatchWillSendSubmitEvent(Ref<WebCore::FormState>&&) final;
    137     void dispatchWillSubmitForm(WebCore::FormState&, WTF::Function<void(void)>&&) final;
     137    void dispatchWillSubmitForm(WebCore::FormState&, CompletionHandler<void()>&&) final;
    138138
    139139    void revertToProvisionalState(WebCore::DocumentLoader*) final;
  • releases/WebKitGTK/webkit-2.22/Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.mm

    r234808 r236129  
    950950}
    951951
    952 void WebFrameLoaderClient::dispatchWillSubmitForm(FormState& formState, WTF::Function<void(void)>&& function)
     952void WebFrameLoaderClient::dispatchWillSubmitForm(FormState& formState, CompletionHandler<void()>&& completionHandler)
    953953{
    954954    id <WebFormDelegate> formDelegate = [getWebView(m_webFrame.get()) _formDelegate];
    955955    if (!formDelegate) {
    956         function();
     956        completionHandler();
    957957        return;
    958958    }
    959959
    960960    NSDictionary *values = makeFormFieldValuesDictionary(formState);
    961     CallFormDelegate(getWebView(m_webFrame.get()), @selector(frame:sourceFrame:willSubmitForm:withValues:submissionListener:), m_webFrame.get(), kit(formState.sourceDocument().frame()), kit(&formState.form()), values, setUpPolicyListener([function = WTFMove(function)](PolicyAction) { function(); }, PolicyAction::Ignore).get());
     961    CallFormDelegate(getWebView(m_webFrame.get()), @selector(frame:sourceFrame:willSubmitForm:withValues:submissionListener:), m_webFrame.get(), kit(formState.sourceDocument().frame()), kit(&formState.form()), values, setUpPolicyListener([completionHandler = WTFMove(completionHandler)](PolicyAction) mutable { completionHandler(); }, PolicyAction::Ignore).get());
    962962}
    963963
  • releases/WebKitGTK/webkit-2.22/Source/WebKitLegacy/win/ChangeLog

    r234501 r236129  
     12018-08-31  Chris Dumez  <cdumez@apple.com>
     2
     3        Assertion hit in ~CompletionHandler() from ~WebFrame()
     4        https://bugs.webkit.org/show_bug.cgi?id=189199
     5        <rdar://problem/42657233>
     6
     7        Reviewed by Youenn Fablet.
     8
     9        * WebCoreSupport/WebFrameLoaderClient.cpp:
     10        (WebFrameLoaderClient::dispatchWillSubmitForm):
     11        * WebCoreSupport/WebFrameLoaderClient.h:
     12
    1132018-08-02  David Fenton  <david_fenton@apple.com>
    214
  • releases/WebKitGTK/webkit-2.22/Source/WebKitLegacy/win/WebCoreSupport/WebFrameLoaderClient.cpp

    r232814 r236129  
    600600}
    601601
    602 void WebFrameLoaderClient::dispatchWillSubmitForm(FormState& formState, WTF::Function<void(void)>&& function)
     602void WebFrameLoaderClient::dispatchWillSubmitForm(FormState& formState, CompletionHandler<void()>&& completionHandler)
    603603{
    604604    WebView* webView = m_webFrame->webView();
     
    609609
    610610    if (FAILED(webView->formDelegate(&formDelegate))) {
    611         function();
     611        completionHandler();
    612612        return;
    613613    }
     
    624624
    625625    COMPtr<WebFrame> sourceFrame(kit(formState.sourceDocument().frame()));
    626     if (SUCCEEDED(formDelegate->willSubmitForm(m_webFrame, sourceFrame.get(), formElement.get(), formValuesPropertyBag.get(), setUpPolicyListener([function = WTFMove(function)] (PolicyAction) { function(); }).get())))
     626    if (SUCCEEDED(formDelegate->willSubmitForm(m_webFrame, sourceFrame.get(), formElement.get(), formValuesPropertyBag.get(), setUpPolicyListener([completionHandler = WTFMove(completionHandler)] (PolicyAction) { completionHandler(); }).get())))
    627627        return;
    628628
    629629    // FIXME: Add a sane default implementation
    630     function();
     630    completionHandler();
    631631}
    632632
  • releases/WebKitGTK/webkit-2.22/Source/WebKitLegacy/win/WebCoreSupport/WebFrameLoaderClient.h

    r232814 r236129  
    109109
    110110    void dispatchWillSendSubmitEvent(Ref<WebCore::FormState>&&) override;
    111     void dispatchWillSubmitForm(WebCore::FormState&, WTF::Function<void(void)>&&) override;
     111    void dispatchWillSubmitForm(WebCore::FormState&, CompletionHandler<void()>&&) override;
    112112
    113113    void revertToProvisionalState(WebCore::DocumentLoader*) override;
Note: See TracChangeset for help on using the changeset viewer.