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

Side by Side Diff: chrome/browser/renderer_host/x509_user_cert_resource_handler.cc

Issue 6532073: Move core pieces of browser\renderer_host to src\content. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 10 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 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 "chrome/browser/renderer_host/x509_user_cert_resource_handler.h"
6
7 #include "base/string_util.h"
8 #include "chrome/browser/download/download_types.h"
9 #include "chrome/browser/renderer_host/resource_dispatcher_host.h"
10 #include "chrome/browser/renderer_host/resource_dispatcher_host_request_info.h"
11 #include "chrome/browser/ssl/ssl_add_cert_handler.h"
12 #include "chrome/common/resource_response.h"
13 #include "chrome/common/url_constants.h"
14 #include "net/base/io_buffer.h"
15 #include "net/base/mime_sniffer.h"
16 #include "net/base/mime_util.h"
17 #include "net/base/x509_certificate.h"
18 #include "net/http/http_response_headers.h"
19 #include "net/url_request/url_request.h"
20 #include "net/url_request/url_request_status.h"
21
22 X509UserCertResourceHandler::X509UserCertResourceHandler(
23 ResourceDispatcherHost* host, net::URLRequest* request,
24 int render_process_host_id, int render_view_id)
25 : host_(host),
26 request_(request),
27 content_length_(0),
28 buffer_(new DownloadBuffer),
29 read_buffer_(NULL),
30 resource_buffer_(NULL),
31 render_process_host_id_(render_process_host_id),
32 render_view_id_(render_view_id) {
33 }
34
35 bool X509UserCertResourceHandler::OnUploadProgress(int request_id,
36 uint64 position,
37 uint64 size) {
38 return true;
39 }
40
41 bool X509UserCertResourceHandler::OnRequestRedirected(int request_id,
42 const GURL& url,
43 ResourceResponse* resp,
44 bool* defer) {
45 url_ = url;
46 return true;
47 }
48
49 bool X509UserCertResourceHandler::OnResponseStarted(int request_id,
50 ResourceResponse* resp) {
51 return (resp->response_head.mime_type == "application/x-x509-user-cert");
52 }
53
54 bool X509UserCertResourceHandler::OnWillStart(int request_id,
55 const GURL& url,
56 bool* defer) {
57 return true;
58 }
59
60 bool X509UserCertResourceHandler::OnWillRead(int request_id,
61 net::IOBuffer** buf,
62 int* buf_size,
63 int min_size) {
64 // TODO(gauravsh): Should we use 'min_size' here?
65 DCHECK(buf && buf_size);
66 if (!read_buffer_) {
67 read_buffer_ = new net::IOBuffer(kReadBufSize);
68 }
69 *buf = read_buffer_.get();
70 *buf_size = kReadBufSize;
71
72 return true;
73 }
74
75 bool X509UserCertResourceHandler::OnReadCompleted(int request_id,
76 int* bytes_read) {
77 if (!*bytes_read)
78 return true;
79
80 // We have more data to read.
81 DCHECK(read_buffer_);
82 content_length_ += *bytes_read;
83
84 // Release the ownership of the buffer, and store a reference
85 // to it. A new one will be allocated in OnWillRead().
86 net::IOBuffer* buffer = NULL;
87 read_buffer_.swap(&buffer);
88 // TODO(gauravsh): Should this be handled by a separate thread?
89 buffer_->contents.push_back(std::make_pair(buffer, *bytes_read));
90
91 return true;
92 }
93
94 bool X509UserCertResourceHandler::OnResponseCompleted(
95 int request_id,
96 const net::URLRequestStatus& urs,
97 const std::string& sec_info) {
98 if (urs.status() != net::URLRequestStatus::SUCCESS)
99 return false;
100
101 // TODO(gauravsh): Verify that 'request_id' was actually a keygen form post
102 // and only then import the certificate.
103 AssembleResource();
104 scoped_refptr<net::X509Certificate> cert(
105 net::X509Certificate::CreateFromBytes(resource_buffer_->data(),
106 content_length_));
107 // The handler will run the UI and delete itself when it's finished.
108 new SSLAddCertHandler(request_, cert, render_process_host_id_,
109 render_view_id_);
110 return true;
111 }
112
113 void X509UserCertResourceHandler::OnRequestClosed() {
114 }
115
116 X509UserCertResourceHandler::~X509UserCertResourceHandler() {
117 }
118
119 void X509UserCertResourceHandler::AssembleResource() {
120 size_t bytes_copied = 0;
121 resource_buffer_ = new net::IOBuffer(content_length_);
122
123 for (size_t i = 0; i < buffer_->contents.size(); ++i) {
124 net::IOBuffer* data = buffer_->contents[i].first;
125 const int data_len = buffer_->contents[i].second;
126 DCHECK(bytes_copied + data_len <= content_length_);
127 memcpy(resource_buffer_->data() + bytes_copied, data->data(), data_len);
128 bytes_copied += data_len;
129 }
130 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698