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

Side by Side Diff: chrome/browser/extensions/api/messaging/message_property_provider.cc

Issue 1076063002: Remove certificates from Channel ID (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix min compat version number; use make_scoped_ptr; find and restore the changes that got dropped Created 5 years, 7 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
« no previous file with comments | « no previous file | net/base/net_error_list.h » ('j') | net/cert/x509_util_nss.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/api/messaging/message_property_provider.h" 5 #include "chrome/browser/extensions/api/messaging/message_property_provider.h"
6 6
7 #include "base/json/json_writer.h" 7 #include "base/json/json_writer.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/message_loop/message_loop_proxy.h" 9 #include "base/message_loop/message_loop_proxy.h"
10 #include "base/stl_util.h"
10 #include "base/strings/string_piece.h" 11 #include "base/strings/string_piece.h"
11 #include "base/values.h" 12 #include "base/values.h"
12 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/profiles/profile.h"
13 #include "content/public/browser/browser_thread.h" 14 #include "content/public/browser/browser_thread.h"
15 #include "crypto/ec_private_key.h"
14 #include "extensions/common/api/runtime.h" 16 #include "extensions/common/api/runtime.h"
15 #include "net/base/completion_callback.h" 17 #include "net/base/completion_callback.h"
16 #include "net/cert/asn1_util.h" 18 #include "net/cert/asn1_util.h"
17 #include "net/cert/jwk_serializer.h" 19 #include "net/cert/jwk_serializer.h"
18 #include "net/ssl/channel_id_service.h" 20 #include "net/ssl/channel_id_service.h"
19 #include "net/url_request/url_request_context.h" 21 #include "net/url_request/url_request_context.h"
20 #include "net/url_request/url_request_context_getter.h" 22 #include "net/url_request/url_request_context_getter.h"
21 #include "url/gurl.h" 23 #include "url/gurl.h"
22 24
23 namespace extensions { 25 namespace extensions {
(...skipping 15 matching lines...) Expand all
39 base::MessageLoopProxy::current(), 41 base::MessageLoopProxy::current(),
40 request_context_getter, 42 request_context_getter,
41 source_url.host(), 43 source_url.host(),
42 reply)); 44 reply));
43 } 45 }
44 46
45 // Helper struct to bind the memory addresses that will be written to by 47 // Helper struct to bind the memory addresses that will be written to by
46 // ChannelIDService::GetChannelID to the callback provided to 48 // ChannelIDService::GetChannelID to the callback provided to
47 // MessagePropertyProvider::GetChannelID. 49 // MessagePropertyProvider::GetChannelID.
48 struct MessagePropertyProvider::GetChannelIDOutput { 50 struct MessagePropertyProvider::GetChannelIDOutput {
49 std::string domain_bound_private_key; 51 scoped_ptr<crypto::ECPrivateKey> channel_id_key;
50 std::string domain_bound_cert;
51 net::ChannelIDService::RequestHandle request_handle; 52 net::ChannelIDService::RequestHandle request_handle;
52 }; 53 };
53 54
54 // static 55 // static
55 void MessagePropertyProvider::GetChannelIDOnIOThread( 56 void MessagePropertyProvider::GetChannelIDOnIOThread(
56 scoped_refptr<base::TaskRunner> original_task_runner, 57 scoped_refptr<base::TaskRunner> original_task_runner,
57 scoped_refptr<net::URLRequestContextGetter> request_context_getter, 58 scoped_refptr<net::URLRequestContextGetter> request_context_getter,
58 const std::string& host, 59 const std::string& host,
59 const ChannelIDCallback& reply) { 60 const ChannelIDCallback& reply) {
60 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 61 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
61 net::ChannelIDService* channel_id_service = 62 net::ChannelIDService* channel_id_service =
62 request_context_getter->GetURLRequestContext()-> 63 request_context_getter->GetURLRequestContext()->
63 channel_id_service(); 64 channel_id_service();
64 GetChannelIDOutput* output = new GetChannelIDOutput(); 65 GetChannelIDOutput* output = new GetChannelIDOutput();
65 net::CompletionCallback net_completion_callback = 66 net::CompletionCallback net_completion_callback =
66 base::Bind(&MessagePropertyProvider::GotChannelID, 67 base::Bind(&MessagePropertyProvider::GotChannelID,
67 original_task_runner, 68 original_task_runner,
68 base::Owned(output), 69 base::Owned(output),
69 reply); 70 reply);
70 int status = channel_id_service->GetChannelID( 71 int status = channel_id_service->GetChannelID(host, &output->channel_id_key,
71 host, 72 net_completion_callback,
72 &output->domain_bound_private_key, 73 &output->request_handle);
73 &output->domain_bound_cert,
74 net_completion_callback,
75 &output->request_handle);
76 if (status == net::ERR_IO_PENDING) 74 if (status == net::ERR_IO_PENDING)
77 return; 75 return;
78 GotChannelID(original_task_runner, output, reply, status); 76 GotChannelID(original_task_runner, output, reply, status);
79 } 77 }
80 78
81 // static 79 // static
82 void MessagePropertyProvider::GotChannelID( 80 void MessagePropertyProvider::GotChannelID(
83 scoped_refptr<base::TaskRunner> original_task_runner, 81 scoped_refptr<base::TaskRunner> original_task_runner,
84 struct GetChannelIDOutput* output, 82 struct GetChannelIDOutput* output,
85 const ChannelIDCallback& reply, 83 const ChannelIDCallback& reply,
86 int status) { 84 int status) {
87 base::Closure no_tls_channel_id_closure = base::Bind(reply, ""); 85 base::Closure no_tls_channel_id_closure = base::Bind(reply, "");
88 if (status != net::OK) { 86 if (status != net::OK) {
89 original_task_runner->PostTask(FROM_HERE, no_tls_channel_id_closure); 87 original_task_runner->PostTask(FROM_HERE, no_tls_channel_id_closure);
90 return; 88 return;
91 } 89 }
92 base::StringPiece spki; 90 std::vector<uint8> spki_vector;
93 if (!net::asn1::ExtractSPKIFromDERCert(output->domain_bound_cert, &spki)) { 91 if (!output->channel_id_key->ExportPublicKey(&spki_vector)) {
94 original_task_runner->PostTask(FROM_HERE, no_tls_channel_id_closure); 92 original_task_runner->PostTask(FROM_HERE, no_tls_channel_id_closure);
95 return; 93 return;
96 } 94 }
95 base::StringPiece spki(reinterpret_cast<char*>(vector_as_array(&spki_vector)),
96 spki_vector.size());
97 base::DictionaryValue jwk_value; 97 base::DictionaryValue jwk_value;
98 if (!net::JwkSerializer::ConvertSpkiFromDerToJwk(spki, &jwk_value)) { 98 if (!net::JwkSerializer::ConvertSpkiFromDerToJwk(spki, &jwk_value)) {
99 original_task_runner->PostTask(FROM_HERE, no_tls_channel_id_closure); 99 original_task_runner->PostTask(FROM_HERE, no_tls_channel_id_closure);
100 return; 100 return;
101 } 101 }
102 std::string jwk_str; 102 std::string jwk_str;
103 base::JSONWriter::Write(&jwk_value, &jwk_str); 103 base::JSONWriter::Write(&jwk_value, &jwk_str);
104 original_task_runner->PostTask(FROM_HERE, base::Bind(reply, jwk_str)); 104 original_task_runner->PostTask(FROM_HERE, base::Bind(reply, jwk_str));
105 } 105 }
106 106
107 } // namespace extensions 107 } // namespace extensions
OLDNEW
« no previous file with comments | « no previous file | net/base/net_error_list.h » ('j') | net/cert/x509_util_nss.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698