Commit 621b5c60 authored by Sigurd Schneider's avatar Sigurd Schneider Committed by Commit Bot

Report COEP/COOP status via DevTools protocol

Design doc: http://doc/1ZwBd-j5fEJhSNz3Nry-L7qV4TyOO1erHYRXQ9Cax7mo#heading=h.7nki9mck5t64

Bug: chromium:1051466
Change-Id: I27089c294642178102401696b6154aa731eed69f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2351992
Commit-Queue: Sigurd Schneider <sigurds@chromium.org>
Reviewed-by: default avatarMike West <mkwst@chromium.org>
Reviewed-by: default avatarPeter Marshall <petermarshall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#799084}
parent e3aec061
......@@ -24,6 +24,7 @@
#include "content/browser/devtools/devtools_io_context.h"
#include "content/browser/devtools/devtools_stream_pipe.h"
#include "content/browser/devtools/devtools_url_loader_interceptor.h"
#include "content/browser/devtools/protocol/handler_helpers.h"
#include "content/browser/devtools/protocol/network.h"
#include "content/browser/devtools/protocol/page.h"
#include "content/browser/devtools/protocol/security.h"
......@@ -2146,6 +2147,66 @@ void NetworkHandler::SetNetworkConditions(
: nullptr);
}
namespace {
protocol::Network::CrossOriginOpenerPolicyValue
makeCrossOriginOpenerPolicyValue(
network::mojom::CrossOriginOpenerPolicyValue value) {
switch (value) {
case network::mojom::CrossOriginOpenerPolicyValue::kSameOrigin:
return protocol::Network::CrossOriginOpenerPolicyValueEnum::SameOrigin;
case network::mojom::CrossOriginOpenerPolicyValue::kSameOriginAllowPopups:
return protocol::Network::CrossOriginOpenerPolicyValueEnum::
SameOriginAllowPopups;
case network::mojom::CrossOriginOpenerPolicyValue::kUnsafeNone:
return protocol::Network::CrossOriginOpenerPolicyValueEnum::UnsafeNone;
case network::mojom::CrossOriginOpenerPolicyValue::kSameOriginPlusCoep:
return protocol::Network::CrossOriginOpenerPolicyValueEnum::
SameOriginPlusCoep;
}
}
protocol::Network::CrossOriginEmbedderPolicyValue
makeCrossOriginEmbedderPolicyValue(
network::mojom::CrossOriginEmbedderPolicyValue value) {
switch (value) {
case network::mojom::CrossOriginEmbedderPolicyValue::kNone:
return protocol::Network::CrossOriginEmbedderPolicyValueEnum::None;
case network::mojom::CrossOriginEmbedderPolicyValue::kRequireCorp:
return protocol::Network::CrossOriginEmbedderPolicyValueEnum::RequireCorp;
}
}
} // namespace
DispatchResponse NetworkHandler::GetSecurityIsolationStatus(
Maybe<String> frame_id,
std::unique_ptr<protocol::Network::SecurityIsolationStatus>* out_info) {
if (!frame_id.isJust() || !host_) {
// TODO(sigurds): Support for workers.
return Response::InvalidParams("Currently only frames are supported");
}
FrameTreeNode* frame_tree_node = FrameTreeNodeFromDevToolsFrameToken(
host_->frame_tree_node(), frame_id.takeJust());
if (!frame_tree_node) {
return Response::InvalidParams("No frame with given id found");
}
RenderFrameHostImpl* rfhi = frame_tree_node->current_frame_host();
const auto& frame_coep = rfhi->cross_origin_embedder_policy();
auto coep =
protocol::Network::CrossOriginEmbedderPolicyStatus::Create()
.SetValue(makeCrossOriginEmbedderPolicyValue(frame_coep.value))
.Build();
const auto& frame_coop = rfhi->cross_origin_opener_policy();
auto coop = protocol::Network::CrossOriginOpenerPolicyStatus::Create()
.SetValue(makeCrossOriginOpenerPolicyValue(frame_coop.value))
.Build();
*out_info = protocol::Network::SecurityIsolationStatus::Create()
.SetCoep(std::move(coep))
.SetCoop(std::move(coop))
.Build();
return Response::Success();
}
void NetworkHandler::OnRequestWillBeSentExtraInfo(
const std::string& devtools_request_id,
const net::CookieAccessResultList& request_cookie_list,
......
......@@ -196,6 +196,11 @@ class NetworkHandler : public DevToolsDomainHandler,
const base::Optional<net::SSLInfo>& ssl_info,
const std::vector<SignedExchangeError>& errors);
DispatchResponse GetSecurityIsolationStatus(
Maybe<String> in_frameId,
std::unique_ptr<protocol::Network::SecurityIsolationStatus>* out_info)
override;
void OnRequestWillBeSentExtraInfo(
const std::string& devtools_request_id,
const net::CookieAccessResultList& request_cookie_list,
......
......@@ -53,7 +53,7 @@
},
{
"domain": "Network",
"include": ["enable", "disable", "clearBrowserCache", "clearBrowserCookies", "getCookies", "getAllCookies", "deleteCookies", "setCookie", "setCookies", "setExtraHTTPHeaders", "canEmulateNetworkConditions", "emulateNetworkConditions", "setBypassServiceWorker", "setRequestInterception", "continueInterceptedRequest", "getResponseBodyForInterception", "setCacheDisabled", "takeResponseBodyForInterceptionAsStream"],
"include": ["enable", "disable", "clearBrowserCache", "clearBrowserCookies", "getCookies", "getAllCookies", "deleteCookies", "setCookie", "setCookies", "setExtraHTTPHeaders", "canEmulateNetworkConditions", "emulateNetworkConditions", "setBypassServiceWorker", "setRequestInterception", "continueInterceptedRequest", "getResponseBodyForInterception", "setCacheDisabled", "takeResponseBodyForInterceptionAsStream", "getSecurityIsolationStatus"],
"include_events": ["requestWillBeSent", "responseReceived", "loadingFinished", "loadingFailed", "requestIntercepted", "signedExchangeReceived", "requestWillBeSentExtraInfo", "responseReceivedExtraInfo"],
"async": ["clearBrowserCookies", "clearBrowserCache", "getCookies", "getAllCookies", "deleteCookies", "setCookie", "setCookies", "continueInterceptedRequest", "getResponseBodyForInterception", "takeResponseBodyForInterceptionAsStream"]
},
......
......@@ -5333,6 +5333,39 @@ domain Network
# available, such as in the case of HTTP/2 or QUIC.
optional string headersText
experimental type CrossOriginOpenerPolicyValue extends string
enum
SameOrigin
SameOriginAllowPopups
UnsafeNone
SameOriginPlusCoep
experimental type CrossOriginOpenerPolicyStatus extends object
properties
CrossOriginOpenerPolicyValue value
experimental type CrossOriginEmbedderPolicyValue extends string
enum
None
RequireCorp
experimental type CrossOriginEmbedderPolicyStatus extends object
properties
CrossOriginEmbedderPolicyValue value
experimental type SecurityIsolationStatus extends object
properties
CrossOriginOpenerPolicyStatus coop
CrossOriginEmbedderPolicyStatus coep
# Returns information about the COEP/COOP isolation status.
experimental command getSecurityIsolationStatus
parameters
# If no frameId is provided, the status of the target is provided.
optional Page.FrameId frameId
returns
SecurityIsolationStatus status
# This domain provides various functionality related to drawing atop the inspected page.
experimental domain Overlay
depends on DOM
......
......@@ -92,7 +92,7 @@
"domain": "Network",
"exclude": ["clearBrowserCache", "clearBrowserCookies", "getCookies", "getAllCookies", "deleteCookies", "setCookie", "setCookies", "canEmulateNetworkConditions",
"setRequestInterception", "continueInterceptedRequest", "getResponseBodyForInterception",
"takeResponseBodyForInterceptionAsStream"],
"takeResponseBodyForInterceptionAsStream", "getSecurityIsolationStatus"],
"async": ["getResponseBody", "getRequestPostData"]
},
{
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment