Chromium Code Reviews| Index: extensions/browser/api/mime_handler/mime_handler.cc |
| diff --git a/extensions/browser/api/mime_handler/mime_handler.cc b/extensions/browser/api/mime_handler/mime_handler.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..410cc56c74215311123d8161ace786b5c15801aa |
| --- /dev/null |
| +++ b/extensions/browser/api/mime_handler/mime_handler.cc |
| @@ -0,0 +1,77 @@ |
| +// Copyright 2015 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "extensions/browser/api/mime_handler/mime_handler.h" |
| + |
| +#include "content/public/browser/stream_handle.h" |
| +#include "content/public/browser/stream_info.h" |
| +#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h" |
| +#include "extensions/common/constants.h" |
| +#include "mojo/public/cpp/bindings/map.h" |
| +#include "net/http/http_response_headers.h" |
| + |
| +namespace extensions { |
| +namespace { |
| + |
| +mojo::Map<mojo::String, mojo::String> CreateResponseHeadersMap( |
| + const net::HttpResponseHeaders* headers) { |
| + std::map<std::string, std::string> result; |
| + if (!headers) |
| + return mojo::Map<mojo::String, mojo::String>::From(result); |
| + |
| + void* iter = nullptr; |
| + std::string header_name; |
| + std::string header_value; |
| + while (headers->EnumerateHeaderLines(&iter, &header_name, &header_value)) { |
| + auto& current_value = result[header_name]; |
| + if (!current_value.empty()) |
| + current_value += ", "; |
| + current_value += header_value; |
| + } |
| + return mojo::Map<mojo::String, mojo::String>::From(result); |
| +} |
| + |
| +} // namespace |
| + |
| +// static |
| +void MimeHandlerServiceImpl::Create( |
| + base::WeakPtr<StreamContainer> stream_container, |
| + mojo::InterfaceRequest<mime_handler::MimeHandlerService> request) { |
| + mojo::BindToRequest(new MimeHandlerServiceImpl(stream_container), &request); |
| +} |
| + |
| +MimeHandlerServiceImpl::MimeHandlerServiceImpl( |
| + base::WeakPtr<StreamContainer> stream_container) |
| + : stream_(stream_container) { |
| +} |
| + |
| +MimeHandlerServiceImpl::~MimeHandlerServiceImpl() { |
| +} |
| + |
| +void MimeHandlerServiceImpl::GetStreamInfo( |
| + const mojo::Callback<void(mime_handler::StreamInfoPtr)>& callback) { |
| + if (!stream_ || !stream_->stream_info()->handle) { |
| + callback.Run(mime_handler::StreamInfoPtr()); |
| + return; |
| + } |
| + 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.
|
| + auto stream_info = mime_handler::StreamInfo::New(); |
| + stream_info->embedded = stream_->embedded(); |
| + stream_info->tab_id = stream_->tab_id(); |
| + stream_info->mime_type = info->mime_type; |
| + stream_info->original_url = info->original_url.spec(); |
| + stream_info->stream_url = info->handle->GetURL().spec(); |
| + stream_info->expected_content_size = stream_->expected_content_size(); |
| + stream_info->response_headers = |
| + CreateResponseHeadersMap(stream_->stream_info()->response_headers.get()); |
| + callback.Run(stream_info.Pass()); |
| +} |
| + |
| +void MimeHandlerServiceImpl::AbortStream( |
| + const mojo::Callback<void()>& callback) { |
| + stream_->Abort(); |
| + callback.Run(); |
| +} |
| + |
| +} // namespace extensions |