Title: [237389] branches/safari-606-branch/Source/WebKit
Revision
237389
Author
[email protected]
Date
2018-10-24 10:18:55 -0700 (Wed, 24 Oct 2018)

Log Message

Cherry-pick r236227. rdar://problem/45491949

    Crash under WebPageProxy::decidePolicyForNavigationAction()
    https://bugs.webkit.org/show_bug.cgi?id=189763
    <rdar://problem/44597111>

    Reviewed by Alex Christensen.

    Update WebNavigationState::navigation() / WebNavigationState::takeNavigation()
    to return a pointer instead of a reference as we have evidence that they can
    return null. I kept the debug assertions to try and catch the cases where we
    return null but at least we stop crashing in release builds.

    * UIProcess/WebNavigationState.cpp:
    (WebKit::WebNavigationState::navigation):
    (WebKit::WebNavigationState::takeNavigation):
    * UIProcess/WebNavigationState.h:
    * UIProcess/WebPageProxy.cpp:
    (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
    (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
    (WebKit::WebPageProxy::didCommitLoadForFrame):
    (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
    (WebKit::WebPageProxy::didFinishLoadForFrame):
    (WebKit::WebPageProxy::didFailLoadForFrame):
    (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
    (WebKit::WebPageProxy::decidePolicyForNavigationAction):
    (WebKit::WebPageProxy::decidePolicyForResponse):

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236227 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Diff

Modified: branches/safari-606-branch/Source/WebKit/ChangeLog (237388 => 237389)


--- branches/safari-606-branch/Source/WebKit/ChangeLog	2018-10-24 16:56:08 UTC (rev 237388)
+++ branches/safari-606-branch/Source/WebKit/ChangeLog	2018-10-24 17:18:55 UTC (rev 237389)
@@ -1,3 +1,63 @@
+2018-10-24  Kocsen Chung  <[email protected]>
+
+        Cherry-pick r236227. rdar://problem/45491949
+
+    Crash under WebPageProxy::decidePolicyForNavigationAction()
+    https://bugs.webkit.org/show_bug.cgi?id=189763
+    <rdar://problem/44597111>
+    
+    Reviewed by Alex Christensen.
+    
+    Update WebNavigationState::navigation() / WebNavigationState::takeNavigation()
+    to return a pointer instead of a reference as we have evidence that they can
+    return null. I kept the debug assertions to try and catch the cases where we
+    return null but at least we stop crashing in release builds.
+    
+    * UIProcess/WebNavigationState.cpp:
+    (WebKit::WebNavigationState::navigation):
+    (WebKit::WebNavigationState::takeNavigation):
+    * UIProcess/WebNavigationState.h:
+    * UIProcess/WebPageProxy.cpp:
+    (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
+    (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
+    (WebKit::WebPageProxy::didCommitLoadForFrame):
+    (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
+    (WebKit::WebPageProxy::didFinishLoadForFrame):
+    (WebKit::WebPageProxy::didFailLoadForFrame):
+    (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
+    (WebKit::WebPageProxy::decidePolicyForNavigationAction):
+    (WebKit::WebPageProxy::decidePolicyForResponse):
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236227 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2018-09-19  Chris Dumez  <[email protected]>
+
+            Crash under WebPageProxy::decidePolicyForNavigationAction()
+            https://bugs.webkit.org/show_bug.cgi?id=189763
+            <rdar://problem/44597111>
+
+            Reviewed by Alex Christensen.
+
+            Update WebNavigationState::navigation() / WebNavigationState::takeNavigation()
+            to return a pointer instead of a reference as we have evidence that they can
+            return null. I kept the debug assertions to try and catch the cases where we
+            return null but at least we stop crashing in release builds.
+
+            * UIProcess/WebNavigationState.cpp:
+            (WebKit::WebNavigationState::navigation):
+            (WebKit::WebNavigationState::takeNavigation):
+            * UIProcess/WebNavigationState.h:
+            * UIProcess/WebPageProxy.cpp:
+            (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
+            (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
+            (WebKit::WebPageProxy::didCommitLoadForFrame):
+            (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
+            (WebKit::WebPageProxy::didFinishLoadForFrame):
+            (WebKit::WebPageProxy::didFailLoadForFrame):
+            (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
+            (WebKit::WebPageProxy::decidePolicyForNavigationAction):
+            (WebKit::WebPageProxy::decidePolicyForResponse):
+
 2018-10-23  Kocsen Chung  <[email protected]>
 
         Cherry-pick r237238. rdar://problem/45363879

Modified: branches/safari-606-branch/Source/WebKit/UIProcess/WebNavigationState.cpp (237388 => 237389)


--- branches/safari-606-branch/Source/WebKit/UIProcess/WebNavigationState.cpp	2018-10-24 16:56:08 UTC (rev 237388)
+++ branches/safari-606-branch/Source/WebKit/UIProcess/WebNavigationState.cpp	2018-10-24 17:18:55 UTC (rev 237389)
@@ -78,20 +78,20 @@
     return navigation;
 }
 
-API::Navigation& WebNavigationState::navigation(uint64_t navigationID)
+API::Navigation* WebNavigationState::navigation(uint64_t navigationID)
 {
     ASSERT(navigationID);
     ASSERT(m_navigations.contains(navigationID));
 
-    return *m_navigations.get(navigationID);
+    return m_navigations.get(navigationID);
 }
 
-Ref<API::Navigation> WebNavigationState::takeNavigation(uint64_t navigationID)
+RefPtr<API::Navigation> WebNavigationState::takeNavigation(uint64_t navigationID)
 {
     ASSERT(navigationID);
     ASSERT(m_navigations.contains(navigationID));
     
-    return m_navigations.take(navigationID).releaseNonNull();
+    return m_navigations.take(navigationID);
 }
 
 void WebNavigationState::didDestroyNavigation(uint64_t navigationID)

Modified: branches/safari-606-branch/Source/WebKit/UIProcess/WebNavigationState.h (237388 => 237389)


--- branches/safari-606-branch/Source/WebKit/UIProcess/WebNavigationState.h	2018-10-24 16:56:08 UTC (rev 237388)
+++ branches/safari-606-branch/Source/WebKit/UIProcess/WebNavigationState.h	2018-10-24 17:18:55 UTC (rev 237389)
@@ -53,8 +53,8 @@
     Ref<API::Navigation> createReloadNavigation();
     Ref<API::Navigation> createLoadDataNavigation();
 
-    API::Navigation& navigation(uint64_t navigationID);
-    Ref<API::Navigation> takeNavigation(uint64_t navigationID);
+    API::Navigation* navigation(uint64_t navigationID);
+    RefPtr<API::Navigation> takeNavigation(uint64_t navigationID);
     void didDestroyNavigation(uint64_t navigationID);
     void clearAllNavigations();
 

Modified: branches/safari-606-branch/Source/WebKit/UIProcess/WebPageProxy.cpp (237388 => 237389)


--- branches/safari-606-branch/Source/WebKit/UIProcess/WebPageProxy.cpp	2018-10-24 16:56:08 UTC (rev 237388)
+++ branches/safari-606-branch/Source/WebKit/UIProcess/WebPageProxy.cpp	2018-10-24 17:18:55 UTC (rev 237389)
@@ -3469,7 +3469,7 @@
     // FIXME: We should message check that navigationID is not zero here, but it's currently zero for some navigations through the page cache.
     RefPtr<API::Navigation> navigation;
     if (frame->isMainFrame() && navigationID)
-        navigation = &navigationState().navigation(navigationID);
+        navigation = navigationState().navigation(navigationID);
 
     // If this seemingly new load is actually continuing a server redirect for a previous navigation in a new process,
     // then we ignore this notification.
@@ -3518,7 +3518,7 @@
     // FIXME: We should message check that navigationID is not zero here, but it's currently zero for some navigations through the page cache.
     RefPtr<API::Navigation> navigation;
     if (navigationID) {
-        navigation = &navigationState().navigation(navigationID);
+        navigation = navigationState().navigation(navigationID);
         navigation->appendRedirectionURL(request.url());
     }
 
@@ -3651,7 +3651,7 @@
     // FIXME: We should message check that navigationID is not zero here, but it's currently zero for some navigations through the page cache.
     RefPtr<API::Navigation> navigation;
     if (frame->isMainFrame() && navigationID)
-        navigation = &navigationState().navigation(navigationID);
+        navigation = navigationState().navigation(navigationID);
 
     m_process->didCommitProvisionalLoad();
 
@@ -3738,7 +3738,7 @@
     // FIXME: We should message check that navigationID is not zero here, but it's currently zero for some navigations through the page cache.
     RefPtr<API::Navigation> navigation;
     if (frame->isMainFrame() && navigationID)
-        navigation = &navigationState().navigation(navigationID);
+        navigation = navigationState().navigation(navigationID);
 
     if (m_navigationClient) {
         if (frame->isMainFrame())
@@ -3759,7 +3759,7 @@
     // FIXME: We should message check that navigationID is not zero here, but it's currently zero for some navigations through the page cache.
     RefPtr<API::Navigation> navigation;
     if (frame->isMainFrame() && navigationID)
-        navigation = &navigationState().navigation(navigationID);
+        navigation = navigationState().navigation(navigationID);
 
     auto transaction = m_pageLoadState.transaction();
 
@@ -3801,7 +3801,7 @@
     // FIXME: We should message check that navigationID is not zero here, but it's currently zero for some navigations through the page cache.
     RefPtr<API::Navigation> navigation;
     if (frame->isMainFrame() && navigationID)
-        navigation = &navigationState().navigation(navigationID);
+        navigation = navigationState().navigation(navigationID);
 
     clearLoadDependentCallbacks();
 
@@ -3843,7 +3843,7 @@
     // FIXME: We should message check that navigationID is not zero here, but it's currently zero for some navigations through the page cache.
     RefPtr<API::Navigation> navigation;
     if (frame->isMainFrame() && navigationID)
-        navigation = &navigationState().navigation(navigationID);
+        navigation = navigationState().navigation(navigationID);
 
     auto transaction = m_pageLoadState.transaction();
 
@@ -4026,7 +4026,7 @@
 
     RefPtr<API::Navigation> navigation;
     if (navigationID)
-        navigation = makeRef(m_navigationState->navigation(navigationID));
+        navigation = m_navigationState->navigation(navigationID);
 
     if (auto targetBackForwardItemIdentifier = navigationActionData.targetBackForwardItemIdentifier) {
         if (auto* item = m_backForwardList->itemForID(*navigationActionData.targetBackForwardItemIdentifier)) {
@@ -4059,7 +4059,7 @@
 
 #if ENABLE(CONTENT_FILTERING)
     if (frame->didHandleContentFilterUnblockNavigation(request))
-        return receivedPolicyDecision(PolicyAction::Ignore, *frame, listenerID, &m_navigationState->navigation(newNavigationID), { });
+        return receivedPolicyDecision(PolicyAction::Ignore, *frame, listenerID, m_navigationState->navigation(newNavigationID), { });
 #else
     UNUSED_PARAM(newNavigationID);
 #endif
@@ -4139,8 +4139,8 @@
 
     Ref<WebFramePolicyListenerProxy> listener = frame->setUpPolicyListenerProxy(listenerID, PolicyListenerType::Response);
     if (navigationID) {
-        auto& navigation = m_navigationState->navigation(navigationID);
-        listener->setNavigation(navigation);
+        if (auto* navigation = m_navigationState->navigation(navigationID))
+            listener->setNavigation(*navigation);
     }
 
     if (m_navigationClient) {
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to