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

Side by Side 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 unified diff | Download patch
OLDNEW
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698