|
1 | 1 | #include "Stdafx.h" |
2 | 2 |
|
3 | | -#include "SchemeHandler.h" |
| 3 | +#include "SchemeHandlerWrapper.h" |
| 4 | + |
| 5 | +using namespace System::Runtime::InteropServices; |
4 | 6 |
|
5 | 7 | namespace CefSharp |
6 | 8 | { |
7 | | - void SchemeHandlerWrapper::GetResponseHeaders(CefRefPtr<CefResponse> response, int64& response_length, CefString& redirectUrl) |
| 9 | + namespace |
8 | 10 | { |
9 | | - response->SetMimeType(_mime_type); |
10 | | - response->SetStatus(200); |
11 | | - response_length = SizeFromStream(); |
12 | | - } |
| 11 | + CefResponse::HeaderMap ToHeaderMap(IDictionary<String^, String^>^ headers) |
| 12 | + { |
| 13 | + CefResponse::HeaderMap result; |
| 14 | + |
| 15 | + for each (KeyValuePair<String^, String^> header in headers) |
| 16 | + { |
| 17 | + result.insert(std::pair<CefString,CefString>(toNative(header.Key), toNative(header.Value))); |
| 18 | + } |
| 19 | + |
| 20 | + return result; |
| 21 | + } |
| 22 | + }; |
13 | 23 |
|
14 | 24 | bool SchemeHandlerWrapper::ProcessRequest(CefRefPtr<CefRequest> request, CefRefPtr<CefSchemeHandlerCallback> callback) |
15 | 25 | { |
| 26 | + _callback = callback; |
| 27 | + |
16 | 28 | bool handled = false; |
17 | 29 | Stream^ stream; |
18 | 30 | String^ mimeType; |
19 | 31 |
|
20 | 32 | AutoLock lock_scope(this); |
21 | 33 |
|
22 | | - IRequest^ requestWrapper = gcnew CefRequestWrapper(request); |
23 | | - if (_handler->ProcessRequest(requestWrapper, mimeType, stream)) |
24 | | - { |
25 | | - _mime_type = toNative(mimeType); |
26 | | - _stream = stream; |
27 | | - callback->HeadersAvailable(); |
| 34 | + auto schemeResponse = gcnew SchemeHandlerResponse(this); |
| 35 | + auto onRequestCompleted = gcnew OnRequestCompletedHandler(schemeResponse, &SchemeHandlerResponse::OnRequestCompleted); |
28 | 36 |
|
| 37 | + auto requestWrapper = gcnew CefRequestWrapper(request); |
| 38 | + if (_handler->ProcessRequestAsync(requestWrapper, schemeResponse, onRequestCompleted)) |
| 39 | + { |
29 | 40 | handled = true; |
30 | 41 | } |
31 | 42 |
|
32 | 43 | return handled; |
33 | 44 | } |
34 | 45 |
|
| 46 | + void SchemeHandlerWrapper::ProcessRequestCallback(SchemeHandlerResponse^ response) |
| 47 | + { |
| 48 | + _mime_type = toNative(response->MimeType); |
| 49 | + _stream = response->ResponseStream; |
| 50 | + |
| 51 | + _headers = ToHeaderMap(response->ResponseHeaders); |
| 52 | + |
| 53 | + _callback->HeadersAvailable(); |
| 54 | + } |
| 55 | + |
| 56 | + void SchemeHandlerWrapper::GetResponseHeaders(CefRefPtr<CefResponse> response, int64& response_length, CefString& redirectUrl) |
| 57 | + { |
| 58 | + response->SetMimeType(_mime_type); |
| 59 | + response->SetStatus(200); |
| 60 | + response->SetHeaderMap(_headers); |
| 61 | + response_length = SizeFromStream(); |
| 62 | + } |
| 63 | + |
35 | 64 | bool SchemeHandlerWrapper::ReadResponse(void* data_out, int bytes_to_read, int& bytes_read, CefRefPtr<CefSchemeHandlerCallback> callback) |
36 | 65 | { |
37 | 66 | bool has_data = false; |
|
0 commit comments