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

Unified Diff: third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp

Issue 2296953004: Send certificates to devtools when it's open instead of using certId (Closed)
Patch Set: clear certificates on didstartprovisionalload Created 4 years, 3 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: third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp
diff --git a/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp
index c23cd6e6b90876686d037f4016f1a7853edc7309..5d688b3588805f36ab5508e7f7a5453e66375759 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp
@@ -315,7 +315,7 @@ static std::unique_ptr<protocol::Network::Request> buildObjectForResourceRequest
return requestObject;
}
-static std::unique_ptr<protocol::Network::Response> buildObjectForResourceResponse(const ResourceResponse& response, Resource* cachedResource = nullptr, bool* isEmpty = nullptr)
+static std::unique_ptr<protocol::Network::Response> buildObjectForResourceResponse(const ResourceResponse& response, Vector<Vector<AtomicString>>* certificates, Resource* cachedResource = nullptr, bool* isEmpty = nullptr)
{
if (response.isNull())
return nullptr;
@@ -420,6 +420,12 @@ static std::unique_ptr<protocol::Network::Response> buildObjectForResourceRespon
const ResourceResponse::SecurityDetails* responseSecurityDetails = response.getSecurityDetails();
+ std::unique_ptr<protocol::Array<String>> sanList = protocol::Array<String>::create();
+ for (auto const& san : responseSecurityDetails->sanList)
+ sanList->addItem(san);
+
+ certificates->append(responseSecurityDetails->certificate);
+
std::unique_ptr<protocol::Array<protocol::Network::SignedCertificateTimestamp>> signedCertificateTimestampList = protocol::Array<protocol::Network::SignedCertificateTimestamp>::create();
for (auto const& sct : responseSecurityDetails->sctList) {
std::unique_ptr<protocol::Network::SignedCertificateTimestamp> signedCertificateTimestamp = protocol::Network::SignedCertificateTimestamp::create()
@@ -439,8 +445,14 @@ static std::unique_ptr<protocol::Network::Response> buildObjectForResourceRespon
.setProtocol(responseSecurityDetails->protocol)
.setKeyExchange(responseSecurityDetails->keyExchange)
.setCipher(responseSecurityDetails->cipher)
- .setCertificateId(responseSecurityDetails->certID)
+ .setSubjectName(responseSecurityDetails->subjectName)
+ .setSanList(std::move(sanList))
+ .setIssuer(responseSecurityDetails->issuer)
+ .setValidFrom(responseSecurityDetails->validFrom)
+ .setValidTo(responseSecurityDetails->validTo)
+ .setCertificateId(0) // Keep this in protocol for compatability.
.setSignedCertificateTimestampList(std::move(signedCertificateTimestampList))
+ .setCertificateIndex(certificates->size() - 1)
.build();
if (responseSecurityDetails->mac.length() > 0)
securityDetails->setMac(responseSecurityDetails->mac);
@@ -480,6 +492,11 @@ bool InspectorNetworkAgent::shouldBlockRequest(const ResourceRequest& request)
return false;
}
+void InspectorNetworkAgent::didStartProvisionalLoad()
+{
+ m_certificates.clear();
+}
+
void InspectorNetworkAgent::didBlockRequest(LocalFrame* frame, const ResourceRequest& request, DocumentLoader* loader, const FetchInitiatorInfo& initiatorInfo, ResourceRequestBlockedReason reason)
{
unsigned long identifier = createUniqueIdentifier();
@@ -524,7 +541,7 @@ void InspectorNetworkAgent::willSendRequestInternal(LocalFrame* frame, unsigned
requestInfo->setMixedContentType(mixedContentTypeForContextType(MixedContentChecker::contextTypeForInspector(frame, request)));
String resourceType = InspectorPageAgent::resourceTypeJson(type);
- frontend()->requestWillBeSent(requestId, frameId, loaderId, urlWithoutFragment(loader->url()).getString(), std::move(requestInfo), monotonicallyIncreasingTime(), currentTime(), std::move(initiatorObject), buildObjectForResourceResponse(redirectResponse), resourceType);
+ frontend()->requestWillBeSent(requestId, frameId, loaderId, urlWithoutFragment(loader->url()).getString(), std::move(requestInfo), monotonicallyIncreasingTime(), currentTime(), std::move(initiatorObject), buildObjectForResourceResponse(redirectResponse, &m_certificates), resourceType);
if (m_pendingXHRReplayData && !m_pendingXHRReplayData->async())
frontend()->flush();
}
@@ -574,7 +591,7 @@ void InspectorNetworkAgent::didReceiveResourceResponse(LocalFrame* frame, unsign
bool isNotModified = response.httpStatusCode() == 304;
bool resourceIsEmpty = true;
- std::unique_ptr<protocol::Network::Response> resourceResponse = buildObjectForResourceResponse(response, cachedResource, &resourceIsEmpty);
+ std::unique_ptr<protocol::Network::Response> resourceResponse = buildObjectForResourceResponse(response, &m_certificates, cachedResource, &resourceIsEmpty);
InspectorPageAgent::ResourceType type = cachedResource ? InspectorPageAgent::cachedResourceType(*cachedResource) : InspectorPageAgent::OtherResource;
// Override with already discovered resource type.
@@ -940,6 +957,7 @@ void InspectorNetworkAgent::disable(ErrorString*)
m_instrumentingAgents->removeInspectorNetworkAgent(this);
m_resourcesData->clear();
m_knownRequestIdMap.clear();
+ m_certificates.clear();
}
void InspectorNetworkAgent::setUserAgentOverride(ErrorString* errorString, const String& userAgent)
@@ -1120,6 +1138,16 @@ void InspectorNetworkAgent::setDataSizeLimitsForTest(ErrorString*, int maxTotal,
m_resourcesData->setResourcesDataSizeLimits(maxTotal, maxResource);
}
+void InspectorNetworkAgent::showCertificateViewer(ErrorString*, int certificateIndex)
+{
+ size_t index = static_cast<size_t>(certificateIndex);
+ if (index >= m_certificates.size()) {
+ NOTREACHED();
+ return;
+ }
+ m_client->showCertificateViewer(m_certificates[index]);
+}
+
void InspectorNetworkAgent::didCommitLoad(LocalFrame* frame, DocumentLoader* loader)
{
if (loader->frame() != m_inspectedFrames->root())
@@ -1172,8 +1200,9 @@ void InspectorNetworkAgent::removeFinishedReplayXHRFired(TimerBase*)
m_replayXHRsToBeDeleted.clear();
}
-InspectorNetworkAgent::InspectorNetworkAgent(InspectedFrames* inspectedFrames)
- : m_inspectedFrames(inspectedFrames)
+InspectorNetworkAgent::InspectorNetworkAgent(Client* client, InspectedFrames* inspectedFrames)
+ : m_client(client)
+ , m_inspectedFrames(inspectedFrames)
, m_resourcesData(NetworkResourcesData::create(maximumTotalBufferSize, maximumResourceBufferSize))
, m_pendingRequest(nullptr)
, m_isRecalculatingStyle(false)

Powered by Google App Engine
This is Rietveld 408576698