Open the response stream | handle_request | result | description | ----------------------------------------------------------------------------------------------- | true | true | Handle the request immediately | | false | true | Decide at a later time. Execute callback to continue or ca
| 23 | // | true | false | Cancel the request immediately | |
| 24 | // | false | false | backwards compatibility. the ProcessRequest method will be called | |
| 25 | bool SchemeFileHandler::Open(CefRefPtr<CefRequest> request, |
| 26 | bool& handle_request, |
| 27 | CefRefPtr<CefCallback> callback) |
| 28 | { |
| 29 | handle_request = true; |
| 30 | CefURLParts url_parts; |
| 31 | if (!CefParseURL(request->GetURL(), url_parts)) |
| 32 | { |
| 33 | pmlog_error(std::format("Failed parsing URL: {}", request->GetURL().ToString())); |
| 34 | return false; |
| 35 | } |
| 36 | |
| 37 | std::filesystem::path path_part(CefString(&url_parts.path).ToWString()); |
| 38 | path_part = path_part.relative_path(); |
| 39 | |
| 40 | file_path_ = directory_ / path_part; |
| 41 | if (!std::filesystem::is_regular_file(file_path_)) |
| 42 | { |
| 43 | pmlog_error(std::format("Failed locating file: {}", file_path_.string())); |
| 44 | return false; |
| 45 | } |
| 46 | file_size_ = std::filesystem::file_size(file_path_); |
| 47 | std::string extension = file_path_.extension().string(); |
| 48 | extension.erase(std::remove(extension.begin(), extension.end(), '.'), extension.end()); |
| 49 | if (!extension.empty()) |
| 50 | { |
| 51 | mime_type_ = CefGetMimeType(extension); |
| 52 | } |
| 53 | |
| 54 | file_stream_ = std::ifstream(file_path_, std::ios::binary); |
| 55 | if (!file_stream_) |
| 56 | { |
| 57 | pmlog_error(std::format("Failed opening file: {}", file_path_.string())); |
| 58 | return false; |
| 59 | } |
| 60 | |
| 61 | pmlog_dbg(std::format("Opening file: {}", file_path_.string())); |
| 62 | return true; |
| 63 | } |
| 64 | |
| 65 | void SchemeFileHandler::GetResponseHeaders(CefRefPtr<CefResponse> response, |
| 66 | int64_t& response_length, |