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 |