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

Side by Side Diff: content/browser/devtools/protocol/security_handler.cc

Issue 2572653003: [DevTools] Migrate security handler to new generator. (Closed)
Patch Set: no protocol changes Created 4 years 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 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 "content/browser/devtools/protocol/security_handler.h" 5 #include "content/browser/devtools/protocol/security_handler.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "content/browser/devtools/protocol/devtools_protocol_dispatcher.h" 9 #include "content/browser/frame_host/render_frame_host_impl.h"
10 #include "content/public/browser/navigation_controller.h" 10 #include "content/public/browser/navigation_controller.h"
11 #include "content/public/browser/navigation_entry.h" 11 #include "content/public/browser/navigation_entry.h"
12 #include "content/public/browser/security_style_explanations.h" 12 #include "content/public/browser/security_style_explanations.h"
13 #include "content/public/browser/ssl_status.h" 13 #include "content/public/browser/ssl_status.h"
14 #include "content/public/browser/web_contents.h" 14 #include "content/public/browser/web_contents.h"
15 #include "content/public/browser/web_contents_delegate.h" 15 #include "content/public/browser/web_contents_delegate.h"
16 16
17 namespace content { 17 namespace content {
18 namespace devtools { 18 namespace protocol {
19 namespace security {
20 19
21 typedef DevToolsProtocolClient::Response Response; 20 using Explanations = protocol::Array<Security::SecurityStateExplanation>;
22 21
23 namespace { 22 namespace {
24 23
25 std::string SecurityStyleToProtocolSecurityState( 24 std::string SecurityStyleToProtocolSecurityState(
26 blink::WebSecurityStyle security_style) { 25 blink::WebSecurityStyle security_style) {
27 switch (security_style) { 26 switch (security_style) {
28 case blink::WebSecurityStyleUnknown: 27 case blink::WebSecurityStyleUnknown:
29 return kSecurityStateUnknown; 28 return Security::SecurityStateEnum::Unknown;
30 case blink::WebSecurityStyleUnauthenticated: 29 case blink::WebSecurityStyleUnauthenticated:
31 return kSecurityStateNeutral; 30 return Security::SecurityStateEnum::Neutral;
32 case blink::WebSecurityStyleAuthenticationBroken: 31 case blink::WebSecurityStyleAuthenticationBroken:
33 return kSecurityStateInsecure; 32 return Security::SecurityStateEnum::Insecure;
34 case blink::WebSecurityStyleWarning: 33 case blink::WebSecurityStyleWarning:
35 return kSecurityStateWarning; 34 return Security::SecurityStateEnum::Warning;
36 case blink::WebSecurityStyleAuthenticated: 35 case blink::WebSecurityStyleAuthenticated:
37 return kSecurityStateSecure; 36 return Security::SecurityStateEnum::Secure;
38 default: 37 default:
39 NOTREACHED(); 38 NOTREACHED();
40 return kSecurityStateUnknown; 39 return Security::SecurityStateEnum::Unknown;
41 } 40 }
42 } 41 }
43 42
44 void AddExplanations( 43 void AddExplanations(
45 const std::string& security_style, 44 const std::string& security_style,
46 const std::vector<SecurityStyleExplanation>& explanations_to_add, 45 const std::vector<SecurityStyleExplanation>& explanations_to_add,
47 std::vector<scoped_refptr<SecurityStateExplanation>>* explanations) { 46 Explanations* explanations) {
48 for (const auto& it : explanations_to_add) { 47 for (const auto& it : explanations_to_add) {
49 scoped_refptr<SecurityStateExplanation> explanation = 48 explanations->addItem(Security::SecurityStateExplanation::Create()
50 SecurityStateExplanation::Create() 49 .SetSecurityState(security_style)
51 ->set_security_state(security_style) 50 .SetSummary(it.summary)
52 ->set_summary(it.summary) 51 .SetDescription(it.description)
53 ->set_description(it.description) 52 .SetHasCertificate(it.has_certificate)
54 ->set_has_certificate(it.has_certificate); 53 .Build());
55 explanations->push_back(explanation);
56 } 54 }
57 } 55 }
58 56
59 } // namespace 57 } // namespace
60 58
61 SecurityHandler::SecurityHandler() 59 SecurityHandler::SecurityHandler()
62 : enabled_(false), 60 : enabled_(false),
63 host_(nullptr) { 61 host_(nullptr) {
64 } 62 }
65 63
66 SecurityHandler::~SecurityHandler() { 64 SecurityHandler::~SecurityHandler() {
67 } 65 }
68 66
69 void SecurityHandler::SetClient(std::unique_ptr<Client> client) { 67 void SecurityHandler::Wire(UberDispatcher* dispatcher) {
70 client_.swap(client); 68 frontend_.reset(new Security::Frontend(dispatcher->channel()));
69 Security::Dispatcher::wire(dispatcher, this);
71 } 70 }
72 71
73 void SecurityHandler::AttachToRenderFrameHost() { 72 void SecurityHandler::AttachToRenderFrameHost() {
74 DCHECK(host_); 73 DCHECK(host_);
75 WebContents* web_contents = WebContents::FromRenderFrameHost(host_); 74 WebContents* web_contents = WebContents::FromRenderFrameHost(host_);
76 WebContentsObserver::Observe(web_contents); 75 WebContentsObserver::Observe(web_contents);
77 76
78 // Send an initial DidChangeVisibleSecurityState event. 77 // Send an initial DidChangeVisibleSecurityState event.
79 DCHECK(enabled_); 78 DCHECK(enabled_);
80 DidChangeVisibleSecurityState(); 79 DidChangeVisibleSecurityState();
81 } 80 }
82 81
83 void SecurityHandler::SetRenderFrameHost(RenderFrameHost* host) { 82 void SecurityHandler::SetRenderFrameHost(RenderFrameHostImpl* host) {
84 host_ = host; 83 host_ = host;
85 if (enabled_ && host_) 84 if (enabled_ && host_)
86 AttachToRenderFrameHost(); 85 AttachToRenderFrameHost();
87 } 86 }
88 87
89 void SecurityHandler::DidChangeVisibleSecurityState() { 88 void SecurityHandler::DidChangeVisibleSecurityState() {
90 DCHECK(enabled_); 89 DCHECK(enabled_);
91 90
92 SecurityStyleExplanations security_style_explanations; 91 SecurityStyleExplanations security_style_explanations;
93 blink::WebSecurityStyle security_style = 92 blink::WebSecurityStyle security_style =
94 web_contents()->GetDelegate()->GetSecurityStyle( 93 web_contents()->GetDelegate()->GetSecurityStyle(
95 web_contents(), &security_style_explanations); 94 web_contents(), &security_style_explanations);
96 95
97 const std::string security_state = 96 const std::string security_state =
98 SecurityStyleToProtocolSecurityState(security_style); 97 SecurityStyleToProtocolSecurityState(security_style);
99 98
100 std::vector<scoped_refptr<SecurityStateExplanation>> explanations; 99 std::unique_ptr<Explanations> explanations = Explanations::create();
101 AddExplanations(kSecurityStateInsecure, 100 AddExplanations(Security::SecurityStateEnum::Insecure,
102 security_style_explanations.broken_explanations, 101 security_style_explanations.broken_explanations,
103 &explanations); 102 explanations.get());
104 AddExplanations(kSecurityStateNeutral, 103 AddExplanations(Security::SecurityStateEnum::Neutral,
105 security_style_explanations.unauthenticated_explanations, 104 security_style_explanations.unauthenticated_explanations,
106 &explanations); 105 explanations.get());
107 AddExplanations(kSecurityStateSecure, 106 AddExplanations(Security::SecurityStateEnum::Secure,
108 security_style_explanations.secure_explanations, 107 security_style_explanations.secure_explanations,
109 &explanations); 108 explanations.get());
110 AddExplanations(kSecurityStateInfo, 109 AddExplanations(Security::SecurityStateEnum::Info,
111 security_style_explanations.info_explanations, &explanations); 110 security_style_explanations.info_explanations,
111 explanations.get());
112 112
113 scoped_refptr<InsecureContentStatus> insecure_content_status = 113 std::unique_ptr<Security::InsecureContentStatus> insecure_status =
114 InsecureContentStatus::Create() 114 Security::InsecureContentStatus::Create()
115 ->set_ran_mixed_content(security_style_explanations.ran_mixed_content) 115 .SetRanMixedContent(security_style_explanations.ran_mixed_content)
116 ->set_displayed_mixed_content( 116 .SetDisplayedMixedContent(
117 security_style_explanations.displayed_mixed_content) 117 security_style_explanations.displayed_mixed_content)
118 ->set_ran_content_with_cert_errors( 118 .SetRanContentWithCertErrors(
119 security_style_explanations.ran_content_with_cert_errors) 119 security_style_explanations.ran_content_with_cert_errors)
120 ->set_displayed_content_with_cert_errors( 120 .SetDisplayedContentWithCertErrors(
121 security_style_explanations.displayed_content_with_cert_errors) 121 security_style_explanations.displayed_content_with_cert_errors)
122 ->set_ran_insecure_content_style(SecurityStyleToProtocolSecurityState( 122 .SetRanInsecureContentStyle(SecurityStyleToProtocolSecurityState(
123 security_style_explanations.ran_insecure_content_style)) 123 security_style_explanations.ran_insecure_content_style))
124 ->set_displayed_insecure_content_style( 124 .SetDisplayedInsecureContentStyle(
125 SecurityStyleToProtocolSecurityState( 125 SecurityStyleToProtocolSecurityState(
126 security_style_explanations 126 security_style_explanations
127 .displayed_insecure_content_style)); 127 .displayed_insecure_content_style))
128 .Build();
128 129
129 client_->SecurityStateChanged( 130 frontend_->SecurityStateChanged(
130 SecurityStateChangedParams::Create() 131 security_state,
131 ->set_security_state(security_state) 132 Maybe<Explanations>(std::move(explanations)),
132 ->set_scheme_is_cryptographic( 133 Maybe<Security::InsecureContentStatus>(std::move(insecure_status)),
133 security_style_explanations.scheme_is_cryptographic) 134 Maybe<bool>(security_style_explanations.scheme_is_cryptographic));
134 ->set_insecure_content_status(insecure_content_status)
135 ->set_explanations(explanations));
136 } 135 }
137 136
138 Response SecurityHandler::Enable() { 137 Response SecurityHandler::Enable() {
139 enabled_ = true; 138 enabled_ = true;
140 if (host_) 139 if (host_)
141 AttachToRenderFrameHost(); 140 AttachToRenderFrameHost();
142 141
143 return Response::OK(); 142 return Response::OK();
144 } 143 }
145 144
146 Response SecurityHandler::Disable() { 145 Response SecurityHandler::Disable() {
147 enabled_ = false; 146 enabled_ = false;
148 WebContentsObserver::Observe(nullptr); 147 WebContentsObserver::Observe(nullptr);
149 return Response::OK(); 148 return Response::OK();
150 } 149 }
151 150
152 Response SecurityHandler::ShowCertificateViewer() { 151 Response SecurityHandler::ShowCertificateViewer() {
153 if (!host_) 152 if (!host_)
154 return Response::InternalError("Could not connect to view"); 153 return Response::InternalError();
155 WebContents* web_contents = WebContents::FromRenderFrameHost(host_); 154 WebContents* web_contents = WebContents::FromRenderFrameHost(host_);
156 scoped_refptr<net::X509Certificate> certificate = 155 scoped_refptr<net::X509Certificate> certificate =
157 web_contents->GetController().GetVisibleEntry()->GetSSL().certificate; 156 web_contents->GetController().GetVisibleEntry()->GetSSL().certificate;
158 if (!certificate) 157 if (!certificate)
159 return Response::InternalError("Could not find certificate"); 158 return Response::Error("Could not find certificate");
160 web_contents->GetDelegate()->ShowCertificateViewerInDevTools( 159 web_contents->GetDelegate()->ShowCertificateViewerInDevTools(
161 web_contents, certificate); 160 web_contents, certificate);
162 return Response::OK(); 161 return Response::OK();
163 } 162 }
164 163
165 } // namespace security 164 } // namespace protocol
166 } // namespace devtools
167 } // namespace content 165 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/devtools/protocol/security_handler.h ('k') | content/browser/devtools/protocol_config.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698