OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "extensions/browser/api/mime_handler_private/mime_handler_private.h" |
| 6 |
| 7 #include "content/public/browser/stream_handle.h" |
| 8 #include "content/public/browser/stream_info.h" |
| 9 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_gues
t.h" |
| 10 #include "extensions/common/constants.h" |
| 11 #include "mojo/public/cpp/bindings/map.h" |
| 12 #include "net/http/http_response_headers.h" |
| 13 |
| 14 namespace extensions { |
| 15 namespace { |
| 16 |
| 17 mojo::Map<mojo::String, mojo::String> CreateResponseHeadersMap( |
| 18 const net::HttpResponseHeaders* headers) { |
| 19 std::map<std::string, std::string> result; |
| 20 if (!headers) |
| 21 return mojo::Map<mojo::String, mojo::String>::From(result); |
| 22 |
| 23 void* iter = nullptr; |
| 24 std::string header_name; |
| 25 std::string header_value; |
| 26 while (headers->EnumerateHeaderLines(&iter, &header_name, &header_value)) { |
| 27 auto& current_value = result[header_name]; |
| 28 if (!current_value.empty()) |
| 29 current_value += ", "; |
| 30 current_value += header_value; |
| 31 } |
| 32 return mojo::Map<mojo::String, mojo::String>::From(result); |
| 33 } |
| 34 |
| 35 } // namespace |
| 36 |
| 37 // static |
| 38 void MimeHandlerServiceImpl::Create( |
| 39 base::WeakPtr<StreamContainer> stream_container, |
| 40 mojo::InterfaceRequest<mime_handler::MimeHandlerService> request) { |
| 41 mojo::BindToRequest(new MimeHandlerServiceImpl(stream_container), &request); |
| 42 } |
| 43 |
| 44 MimeHandlerServiceImpl::MimeHandlerServiceImpl( |
| 45 base::WeakPtr<StreamContainer> stream_container) |
| 46 : stream_(stream_container), weak_factory_(this) { |
| 47 } |
| 48 |
| 49 MimeHandlerServiceImpl::~MimeHandlerServiceImpl() { |
| 50 } |
| 51 |
| 52 void MimeHandlerServiceImpl::GetStreamInfo( |
| 53 const mojo::Callback<void(mime_handler::StreamInfoPtr)>& callback) { |
| 54 if (!stream_) { |
| 55 callback.Run(mime_handler::StreamInfoPtr()); |
| 56 return; |
| 57 } |
| 58 callback.Run(mojo::ConvertTo<mime_handler::StreamInfoPtr>(*stream_)); |
| 59 } |
| 60 |
| 61 void MimeHandlerServiceImpl::AbortStream( |
| 62 const mojo::Callback<void()>& callback) { |
| 63 stream_->Abort(base::Bind(&MimeHandlerServiceImpl::OnStreamClosed, |
| 64 weak_factory_.GetWeakPtr(), callback)); |
| 65 } |
| 66 |
| 67 void MimeHandlerServiceImpl::OnStreamClosed( |
| 68 const mojo::Callback<void()>& callback) { |
| 69 callback.Run(); |
| 70 } |
| 71 |
| 72 } // namespace extensions |
| 73 |
| 74 namespace mojo { |
| 75 |
| 76 extensions::mime_handler::StreamInfoPtr TypeConverter< |
| 77 extensions::mime_handler::StreamInfoPtr, |
| 78 extensions::StreamContainer>::Convert(const extensions::StreamContainer& |
| 79 stream) { |
| 80 if (!stream.stream_info()->handle) |
| 81 return extensions::mime_handler::StreamInfoPtr(); |
| 82 |
| 83 auto result = extensions::mime_handler::StreamInfo::New(); |
| 84 result->embedded = stream.embedded(); |
| 85 result->tab_id = stream.tab_id(); |
| 86 const content::StreamInfo* info = stream.stream_info(); |
| 87 result->mime_type = info->mime_type; |
| 88 result->original_url = info->original_url.spec(); |
| 89 result->stream_url = info->handle->GetURL().spec(); |
| 90 result->response_headers = |
| 91 extensions::CreateResponseHeadersMap(info->response_headers.get()); |
| 92 return result.Pass(); |
| 93 } |
| 94 |
| 95 } // namespace mojo |
OLD | NEW |