Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(42)

Unified Diff: extensions/browser/api/mime_handler/mime_handler.cc

Issue 797183005: Add a mimeHandler extension API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@streams-lifetime
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..f42f94e4e02cd181e760e4b19a6e33019d960dd3
--- /dev/null
+++ b/extensions/browser/api/mime_handler/mime_handler.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/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), 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

Powered by Google App Engine
This is Rietveld 408576698