WebKit Bugzilla
Attachment 346855 Details for
Bug 188358
: WKURLSchemeHandler crashes when sent errors with sync XHR
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-188358-20180809122900.patch (text/plain), 6.22 KB, created by
Alex Christensen
on 2018-08-09 12:29:01 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Alex Christensen
Created:
2018-08-09 12:29:01 PDT
Size:
6.22 KB
patch
obsolete
>Index: Source/WebKit/ChangeLog >=================================================================== >--- Source/WebKit/ChangeLog (revision 234728) >+++ Source/WebKit/ChangeLog (working copy) >@@ -1,3 +1,15 @@ >+2018-08-09 Alex Christensen <achristensen@webkit.org> >+ >+ WKURLSchemeHandler crashes when sent errors with sync XHR >+ https://bugs.webkit.org/show_bug.cgi?id=188358 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * UIProcess/WebURLSchemeTask.cpp: >+ (WebKit::WebURLSchemeTask::didReceiveData): >+ (WebKit::WebURLSchemeTask::didComplete): >+ * UIProcess/WebURLSchemeTask.h: >+ > 2018-08-09 Per Arne Vollan <pvollan@apple.com> > > DisplayRefreshMonitorMac should hold a weak pointer to WebPage. >Index: Source/WebKit/UIProcess/WebURLSchemeTask.cpp >=================================================================== >--- Source/WebKit/UIProcess/WebURLSchemeTask.cpp (revision 234728) >+++ Source/WebKit/UIProcess/WebURLSchemeTask.cpp (working copy) >@@ -96,7 +96,7 @@ auto WebURLSchemeTask::didReceiveRespons > return ExceptionType::None; > } > >-auto WebURLSchemeTask::didReceiveData(Ref<SharedBuffer> buffer) -> ExceptionType >+auto WebURLSchemeTask::didReceiveData(Ref<SharedBuffer>&& buffer) -> ExceptionType > { > if (m_stopped) > return ExceptionType::TaskAlreadyStopped; >@@ -110,9 +110,10 @@ auto WebURLSchemeTask::didReceiveData(Re > m_dataSent = true; > > if (isSync()) { >- if (!m_syncData) >- m_syncData = SharedBuffer::create(); >- m_syncData->append(buffer); >+ if (m_syncData) >+ m_syncData->append(buffer); >+ else >+ m_syncData = WTFMove(buffer); > } > > m_page->send(Messages::WebPage::URLSchemeTaskDidReceiveData(m_urlSchemeHandler->identifier(), m_identifier, IPC::SharedBufferDataReference(buffer.ptr()))); >@@ -133,7 +134,10 @@ auto WebURLSchemeTask::didComplete(const > m_completed = true; > > if (isSync()) { >- m_syncCompletionHandler(m_syncResponse, error, IPC::DataReference { (const uint8_t*)m_syncData->data(), m_syncData->size() }); >+ IPC::DataReference data; >+ if (m_syncData) >+ data = { reinterpret_cast<const uint8_t*>(m_syncData->data()), m_syncData->size() }; >+ m_syncCompletionHandler(m_syncResponse, error, data); > m_syncData = nullptr; > } > >Index: Source/WebKit/UIProcess/WebURLSchemeTask.h >=================================================================== >--- Source/WebKit/UIProcess/WebURLSchemeTask.h (revision 234728) >+++ Source/WebKit/UIProcess/WebURLSchemeTask.h (working copy) >@@ -70,7 +70,7 @@ public: > }; > ExceptionType didPerformRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&); > ExceptionType didReceiveResponse(const WebCore::ResourceResponse&); >- ExceptionType didReceiveData(Ref<WebCore::SharedBuffer>); >+ ExceptionType didReceiveData(Ref<WebCore::SharedBuffer>&&); > ExceptionType didComplete(const WebCore::ResourceError&); > > void stop(); >Index: Tools/ChangeLog >=================================================================== >--- Tools/ChangeLog (revision 234731) >+++ Tools/ChangeLog (working copy) >@@ -1,3 +1,15 @@ >+2018-08-09 Alex Christensen <achristensen@webkit.org> >+ >+ WKURLSchemeHandler crashes when sent errors with sync XHR >+ https://bugs.webkit.org/show_bug.cgi?id=188358 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm: >+ (-[SyncErrorScheme webView:startURLSchemeTask:]): >+ (-[SyncErrorScheme webView:stopURLSchemeTask:]): >+ (-[SyncErrorScheme webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]): >+ > 2018-08-09 Wenson Hsieh <wenson_hsieh@apple.com> > > [iOS WK2] Rename and refactor DataInteractionTests and DataInteractionSimulator >Index: Tools/TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm >=================================================================== >--- Tools/TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm (revision 234728) >+++ Tools/TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm (working copy) >@@ -538,5 +538,49 @@ TEST(URLSchemeHandler, SyncXHR) > TestWebKitAPI::Util::run(&receivedStop); > } > >+@interface SyncErrorScheme : NSObject <WKURLSchemeHandler, WKUIDelegate> >+@end >+ >+@implementation SyncErrorScheme >+ >+- (void)webView:(WKWebView *)webView startURLSchemeTask:(id <WKURLSchemeTask>)task >+{ >+ if ([task.request.URL.absoluteString isEqualToString:@"syncerror:///main.html"]) { >+ static const char* bytes = "<script>var xhr=new XMLHttpRequest();xhr.open('GET','subresource',false);try{xhr.send(null);alert('no error')}catch(e){alert(e)}</script>"; >+ [task didReceiveResponse:[[[NSURLResponse alloc] initWithURL:task.request.URL MIMEType:@"text/html" expectedContentLength:strlen(bytes) textEncodingName:nil] autorelease]]; >+ [task didReceiveData:[NSData dataWithBytes:bytes length:strlen(bytes)]]; >+ [task didFinish]; >+ } else { >+ EXPECT_STREQ(task.request.URL.absoluteString.UTF8String, "syncerror:///subresource"); >+ [task didReceiveResponse:[[[NSURLResponse alloc] init] autorelease]]; >+ [task didFailWithError:[NSError errorWithDomain:@"TestErrorDomain" code:123 userInfo:nil]]; >+ } >+} >+ >+- (void)webView:(WKWebView *)webView stopURLSchemeTask:(id <WKURLSchemeTask>)task >+{ >+} >+ >+- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler >+{ >+ EXPECT_STREQ(message.UTF8String, "NetworkError: A network error occurred."); >+ completionHandler(); >+ done = true; >+} >+ >+@end >+ >+TEST(URLSchemeHandler, SyncXHRError) >+{ >+ auto webViewConfiguration = adoptNS([[WKWebViewConfiguration alloc] init]); >+ auto handler = adoptNS([[SyncErrorScheme alloc] init]); >+ [webViewConfiguration setURLSchemeHandler:handler.get() forURLScheme:@"syncerror"]; >+ auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:webViewConfiguration.get()]); >+ [webView setUIDelegate:handler.get()]; >+ [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"syncerror:///main.html"]]]; >+ TestWebKitAPI::Util::run(&done); >+} >+ >+ > #endif // WK_API_ENABLED >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 188358
:
346655
| 346855