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/mime_handler.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) { | |
47 } | |
48 | |
49 MimeHandlerServiceImpl::~MimeHandlerServiceImpl() { | |
50 } | |
51 | |
52 void MimeHandlerServiceImpl::GetStreamInfo( | |
53 const mojo::Callback<void(mime_handler::StreamInfoPtr)>& callback) { | |
54 if (!stream_ || !stream_->stream_info()->handle) { | |
55 callback.Run(mime_handler::StreamInfoPtr()); | |
56 return; | |
57 } | |
58 auto info = stream_->stream_info(); | |
raymes
2015/01/12 05:26:04
Please add a type converter as discussed :)
Sam McNally
2015/01/12 07:13:35
Done.
| |
59 auto stream_info = mime_handler::StreamInfo::New(); | |
60 stream_info->embedded = stream_->embedded(); | |
61 stream_info->tab_id = stream_->tab_id(); | |
62 stream_info->mime_type = info->mime_type; | |
63 stream_info->original_url = info->original_url.spec(); | |
64 stream_info->stream_url = info->handle->GetURL().spec(); | |
65 stream_info->expected_content_size = stream_->expected_content_size(); | |
66 stream_info->response_headers = | |
67 CreateResponseHeadersMap(stream_->stream_info()->response_headers.get()); | |
68 callback.Run(stream_info.Pass()); | |
69 } | |
70 | |
71 void MimeHandlerServiceImpl::AbortStream( | |
72 const mojo::Callback<void()>& callback) { | |
73 stream_->Abort(); | |
74 callback.Run(); | |
75 } | |
76 | |
77 } // namespace extensions | |
OLD | NEW |