| Index: extensions/browser/api/mime_handler_private/mime_handler_private.cc
|
| diff --git a/extensions/browser/api/mime_handler_private/mime_handler_private.cc b/extensions/browser/api/mime_handler_private/mime_handler_private.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b1f816c3886b33f0f14f7b2d05d7fb9f2d4f4d7d
|
| --- /dev/null
|
| +++ b/extensions/browser/api/mime_handler_private/mime_handler_private.cc
|
| @@ -0,0 +1,95 @@
|
| +// 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_private/mime_handler_private.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), weak_factory_(this) {
|
| +}
|
| +
|
| +MimeHandlerServiceImpl::~MimeHandlerServiceImpl() {
|
| +}
|
| +
|
| +void MimeHandlerServiceImpl::GetStreamInfo(
|
| + const mojo::Callback<void(mime_handler::StreamInfoPtr)>& callback) {
|
| + if (!stream_) {
|
| + callback.Run(mime_handler::StreamInfoPtr());
|
| + return;
|
| + }
|
| + callback.Run(mojo::ConvertTo<mime_handler::StreamInfoPtr>(*stream_));
|
| +}
|
| +
|
| +void MimeHandlerServiceImpl::AbortStream(
|
| + const mojo::Callback<void()>& callback) {
|
| + stream_->Abort(base::Bind(&MimeHandlerServiceImpl::OnStreamClosed,
|
| + weak_factory_.GetWeakPtr(), callback));
|
| +}
|
| +
|
| +void MimeHandlerServiceImpl::OnStreamClosed(
|
| + const mojo::Callback<void()>& callback) {
|
| + callback.Run();
|
| +}
|
| +
|
| +} // namespace extensions
|
| +
|
| +namespace mojo {
|
| +
|
| +extensions::mime_handler::StreamInfoPtr TypeConverter<
|
| + extensions::mime_handler::StreamInfoPtr,
|
| + extensions::StreamContainer>::Convert(const extensions::StreamContainer&
|
| + stream) {
|
| + if (!stream.stream_info()->handle)
|
| + return extensions::mime_handler::StreamInfoPtr();
|
| +
|
| + auto result = extensions::mime_handler::StreamInfo::New();
|
| + result->embedded = stream.embedded();
|
| + result->tab_id = stream.tab_id();
|
| + const content::StreamInfo* info = stream.stream_info();
|
| + result->mime_type = info->mime_type;
|
| + result->original_url = info->original_url.spec();
|
| + result->stream_url = info->handle->GetURL().spec();
|
| + result->response_headers =
|
| + extensions::CreateResponseHeadersMap(info->response_headers.get());
|
| + return result.Pass();
|
| +}
|
| +
|
| +} // namespace mojo
|
|
|