Bug 157028

Summary: [curl] Requests interrupted when using https via proxy
Product: WebKit Reporter: Fujii Hironori <Hironori.Fujii>
Component: PlatformAssignee: Nobody <webkit-unassigned>
Status: RESOLVED FIXED    
Severity: Normal CC: achristensen, bfulgham, cdumez, commit-queue, darin, galpeter, rniwa, sam, youennf
Priority: P2    
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
See Also: https://bugs.webkit.org/show_bug.cgi?id=20481
Attachments:
Description Flags
Patch
none
Patch none

Description Fujii Hironori 2016-04-26 01:02:00 PDT
[curl] Requests interrupted when using https via proxy

trunk@200070
WinCairo port
perl Tools\Scripts\build-webkit --debug --wincairo --64-bit

1) Set environment variables http_proxy and https_proxy
2) Set a environment variable WEBKIT_IGNORE_SSL_ERRORS=1
3) Launch MiniBrowser
4) Go to https://webkit.org
5) A message box "Frame load interrupted" shown

call stack:

> [External Code]	
> MiniBrowserLib.dll!MiniBrowserWebHost::didFailProvisionalLoadWithError(IWebView * __formal, IWebError * error, IWebFrame * __formal) Line 113	C++
> WebKit.dll!WebFrameLoaderClient::dispatchDidFailProvisionalLoad(const WebCore::ResourceError & error) Line 453	C++
> WebKit.dll!WebCore::FrameLoader::checkLoadCompleteForThisFrame() Line 2246	C++
> WebKit.dll!WebCore::FrameLoader::checkLoadComplete() Line 2465	C++
> WebKit.dll!WebCore::FrameLoader::receivedMainResourceError(const WebCore::ResourceError & error) Line 2784	C++
> WebKit.dll!WebCore::DocumentLoader::mainReceivedError(const WebCore::ResourceError & error) Line 270	C++
> WebKit.dll!WebCore::DocumentLoader::notifyFinished(WebCore::CachedResource * resource) Line 393	C++
> WebKit.dll!WebCore::CachedResource::checkNotify() Line 299	C++
> WebKit.dll!WebCore::CachedResource::cancelLoad() Line 336	C++
> WebKit.dll!WebCore::SubresourceLoader::didCancel(const WebCore::ResourceError & __formal) Line 498	C++
> WebKit.dll!WebCore::ResourceLoader::cancel(const WebCore::ResourceError & error) Line 589	C++
> WebKit.dll!WebCore::DocumentLoader::cancelMainResourceLoad(const WebCore::ResourceError & resourceError) Line 1570	C++
> WebKit.dll!WebCore::DocumentLoader::stopLoadingForPolicyChange() Line 846	C++
> WebKit.dll!WebCore::DocumentLoader::continueAfterContentPolicy(WebCore::PolicyAction policy) Line 790	C++
> WebKit.dll!WebCore::DocumentLoader::responseReceived::__l2::<lambda>(WebCore::PolicyAction policy) Line 725	C++
> [External Code]	
> WebKit.dll!WebCore::PolicyCallback::call(WebCore::PolicyAction action) Line 107	C++
> WebKit.dll!WebCore::PolicyChecker::continueAfterContentPolicy(WebCore::PolicyAction policy) Line 244	C++
> WebKit.dll!WebCore::PolicyChecker::checkContentPolicy::__l2::<lambda>(WebCore::PolicyAction action) Line 157	C++
> [External Code]	
> WebKit.dll!WebFrameLoaderClient::receivedPolicyDecision(WebCore::PolicyAction action) Line 1352	C++
> WebKit.dll!WebFramePolicyListener::receivedPolicyDecision(WebCore::PolicyAction action) Line 126	C++
> WebKit.dll!WebFramePolicyListener::ignore() Line 109	C++
> WebKit.dll!DefaultPolicyDelegate::decidePolicyForMIMEType(IWebView * webView, wchar_t * type, IWebURLRequest * request, IWebFrame * __formal, IWebPolicyDecisionListener * listener) Line 168	C++
> WebKit.dll!WebFrameLoaderClient::dispatchDecidePolicyForResponse(const WebCore::ResourceResponse & response, const WebCore::ResourceRequest & request, std::function<void __cdecl(enum WebCore::PolicyAction)> function) Line 541	C++
> WebKit.dll!WebCore::PolicyChecker::checkContentPolicy(const WebCore::ResourceResponse & response, std::function<void __cdecl(enum WebCore::PolicyAction)> function) Line 158	C++
> WebKit.dll!WebCore::DocumentLoader::responseReceived(WebCore::CachedResource * resource, const WebCore::ResourceResponse & response) Line 726	C++
> WebKit.dll!WebCore::CachedRawResource::responseReceived(const WebCore::ResourceResponse & response) Line 186	C++
> WebKit.dll!WebCore::SubresourceLoader::didReceiveResponse(const WebCore::ResourceResponse & response) Line 262	C++
> WebKit.dll!WebCore::ResourceLoader::didReceiveResponse(WebCore::ResourceHandle * __formal, const WebCore::ResourceResponse & response) Line 628	C++
> WebKit.dll!WebCore::headerCallback(char * ptr, unsigned __int64 size, unsigned __int64 nmemb, void * data) Line 548	C++
> libcurl.dll!Curl_client_chop_write(connectdata * conn, int type, char * ptr, unsigned __int64 len) Line 456	C
> libcurl.dll!Curl_proxyCONNECT(connectdata * conn, int sockindex, const char * hostname, int remote_port, bool blocking) Line 369	C
> libcurl.dll!Curl_proxy_connect(connectdata * conn) Line 72	C
> libcurl.dll!Curl_http_connect(connectdata * conn, bool * done) Line 1349	C
> libcurl.dll!multi_runsingle(Curl_multi * multi, timeval now, SessionHandle * data) Line 1216	C
> libcurl.dll!curl_multi_perform(void * multi_handle, int * running_handles) Line 1811	C
> WebKit.dll!WebCore::ResourceHandleManager::downloadTimerCallback() Line 652	C++
> [External Code]	
> WebKit.dll!WebCore::Timer::fired() Line 142	C++
> WebKit.dll!WebCore::ThreadTimers::sharedTimerFiredInternal() Line 124	C++
> WebKit.dll!WebCore::ThreadTimers::setSharedTimer::__l8::<lambda>() Line 73	C++
> [External Code]	
> WebKit.dll!WebCore::MainThreadSharedTimer::fired() Line 53	C++
> WebKit.dll!WebCore::TimerWindowWndProc(HWND__ * hWnd, unsigned int message, unsigned __int64 wParam, __int64 lParam) Line 91	C++
> [External Code]	
> WebKit.dll!WebKitMessageLoop::run(HACCEL__ * hAccelTable) Line 97	C++
> MiniBrowserLib.dll!wWinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, wchar_t * lpstrCmdLine, int nCmdShow) Line 185	C++
> MiniBrowserLib.dll!dllLauncherEntryPoint(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, wchar_t * lpstrCmdLine, int nCmdShow) Line 857	C++
> MiniBrowser.exe!wWinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, wchar_t * lpstrCmdLine, int nCmdShow) Line 262	C++
> [External Code]
Comment 1 Fujii Hironori 2016-04-26 01:12:22 PDT
Client sends "CONNECT", then a proxy responds "200 Connection Established".
libcurl calls WebCore::headerCallback.
In WebFrameLoaderClient::dispatchDecidePolicyForResponse(), response.mimeType() is null.
WebView::canShowMIMEType() returns false.
Then, the request is canceled.

A following bug might be same problem.

  Bug 20481 – [Curl] Cannot log on google with proxy
Comment 2 Fujii Hironori 2016-04-26 01:44:01 PDT
Created attachment 277350 [details]
Patch
Comment 3 Fujii Hironori 2016-04-26 01:53:29 PDT
Created attachment 277351 [details]
Patch
Comment 4 Fujii Hironori 2016-04-26 01:59:33 PDT
AFAIK, curl port is used only by WinCairo port. CC-ed the experts.
Comment 5 Alex Christensen 2016-04-26 10:36:22 PDT
(In reply to comment #4)
> AFAIK, curl port is used only by WinCairo port. CC-ed the experts.
That is correct.
Comment 6 WebKit Commit Bot 2016-04-26 11:26:42 PDT
Comment on attachment 277351 [details]
Patch

Clearing flags on attachment: 277351

Committed r200100: <http://trac.webkit.org/changeset/200100>
Comment 7 WebKit Commit Bot 2016-04-26 11:26:47 PDT
All reviewed patches have been landed.  Closing bug.