0

[Chromecast] Pass render frame ID into network interceptor.

Cast needs both render process ID and render frame ID for
resolving URL requests to owning render frame / web contents.

Bug: internal b/116784351
Test: Build cast_shell and run unittests
Change-Id: Ib1913e41f33410241fe4d63fffa6c1ee68e18be3
Reviewed-on: https://chromium-review.googlesource.com/c/1280930
Reviewed-by: Luke Halliwell <halliwell@chromium.org>
Commit-Queue: Tavis Maclellan <maclellant@chromium.org>
Cr-Commit-Position: refs/heads/master@{#600766}
This commit is contained in:
Tavis Maclellan
2018-10-18 15:26:40 +00:00
committed by Commit Bot
parent 5d4efbea58
commit 6057fc833d
7 changed files with 22 additions and 7 deletions

@ -613,6 +613,7 @@ void CastContentBrowserClient::SelectClientCertificate(
&CastContentBrowserClient::SelectClientCertificateOnIOThread,
base::Unretained(this), requesting_url, session_id,
web_contents->GetMainFrame()->GetProcess()->GetID(),
web_contents->GetMainFrame()->GetRoutingID(),
base::SequencedTaskRunnerHandle::Get(),
base::Bind(
&content::ClientCertificateDelegate::ContinueWithCertificate,
@ -623,6 +624,7 @@ void CastContentBrowserClient::SelectClientCertificateOnIOThread(
GURL requesting_url,
const std::string& session_id,
int render_process_id,
int render_frame_id,
scoped_refptr<base::SequencedTaskRunner> original_runner,
const base::Callback<void(scoped_refptr<net::X509Certificate>,
scoped_refptr<net::SSLPrivateKey>)>&
@ -631,7 +633,8 @@ void CastContentBrowserClient::SelectClientCertificateOnIOThread(
CastNetworkDelegate* network_delegate =
url_request_context_factory_->app_network_delegate();
if (network_delegate->IsWhitelisted(requesting_url, session_id,
render_process_id, false)) {
render_process_id, render_frame_id,
false)) {
original_runner->PostTask(
FROM_HERE,
base::BindOnce(continue_callback, DeviceCert(), DeviceKey()));
@ -639,7 +642,8 @@ void CastContentBrowserClient::SelectClientCertificateOnIOThread(
} else {
LOG(ERROR) << "Invalid host for client certificate request: "
<< requesting_url.host()
<< " with render_process_id: " << render_process_id;
<< " with render_process_id: " << render_process_id
<< " and render_frame_id: " << render_frame_id;
}
original_runner->PostTask(
FROM_HERE, base::BindOnce(continue_callback, nullptr, nullptr));

@ -221,6 +221,7 @@ class CastContentBrowserClient : public content::ContentBrowserClient {
GURL requesting_url,
const std::string& session_id,
int render_process_id,
int render_frame_id,
scoped_refptr<base::SequencedTaskRunner> original_runner,
const base::Callback<void(scoped_refptr<net::X509Certificate>,
scoped_refptr<net::SSLPrivateKey>)>&

@ -40,9 +40,10 @@ void CastNetworkDelegate::Initialize() {
bool CastNetworkDelegate::IsWhitelisted(const GURL& gurl,
const std::string& session_id,
int render_process_id,
int render_frame_id,
bool for_device_auth) const {
return network_request_interceptor_->IsWhiteListed(
gurl, session_id, render_process_id, for_device_auth);
gurl, session_id, render_process_id, render_frame_id, for_device_auth);
}
bool CastNetworkDelegate::OnCanAccessFile(
@ -84,9 +85,11 @@ int CastNetworkDelegate::OnBeforeURLRequest(
if (!content::ResourceRequestInfo::GetRenderFrameForRequest(
request, &render_process_id, &render_frame_id)) {
render_process_id = content::ChildProcessHost::kInvalidUniqueID;
render_frame_id = content::ChildProcessHost::kInvalidUniqueID;
}
return network_request_interceptor_->OnBeforeURLRequest(
request, session_id, render_process_id, std::move(callback), new_url);
request, session_id, render_process_id, render_frame_id,
std::move(callback), new_url);
}
int CastNetworkDelegate::OnBeforeStartTransaction(

@ -30,6 +30,7 @@ class CastNetworkDelegate : public net::NetworkDelegateImpl {
bool IsWhitelisted(const GURL& gurl,
const std::string& session_id,
int render_process_id,
int render_frame_id,
bool for_device_auth) const;
private:

@ -28,17 +28,19 @@ class MockCastNetworkRequestInterceptor : public CastNetworkRequestInterceptor {
MockCastNetworkRequestInterceptor() {}
~MockCastNetworkRequestInterceptor() override {}
MOCK_CONST_METHOD4(IsWhiteListed,
MOCK_CONST_METHOD5(IsWhiteListed,
bool(const GURL& gurl,
const std::string& session_id,
int render_process_id,
int render_frame_id,
bool for_device_auth));
MOCK_METHOD0(Initialize, void());
MOCK_METHOD0(IsInitialized, bool());
MOCK_METHOD5(OnBeforeURLRequest,
MOCK_METHOD6(OnBeforeURLRequest,
int(net::URLRequest* request,
const std::string& session_id,
int render_process_id,
int render_frame_id,
net::CompletionOnceCallback callback,
GURL* new_url));
MOCK_METHOD3(OnBeforeStartTransaction,
@ -88,7 +90,7 @@ TEST_F(CastNetworkDelegateTest, NotifyBeforeURLRequest) {
EXPECT_CALL(*cast_network_request_interceptor_ptr_, IsInitialized())
.WillOnce(Return(true));
EXPECT_CALL(*cast_network_request_interceptor_ptr_,
OnBeforeURLRequest(_, _, _, _, _));
OnBeforeURLRequest(_, _, _, _, _, _));
cast_network_delegate_->NotifyBeforeURLRequest(
request.get(), completion_callback.callback(), NULL);

@ -16,6 +16,7 @@ bool CastNetworkRequestInterceptor::IsWhiteListed(
const GURL& /* gurl */,
const std::string& /* session_id */,
int /* render_process_id */,
int /* render_frame_id */,
bool /* for_device_auth */) const {
return false;
}
@ -30,6 +31,7 @@ int CastNetworkRequestInterceptor::OnBeforeURLRequest(
net::URLRequest* /* request */,
const std::string& /* session_id */,
int /* render_process_id */,
int /* render_frame_id */,
net::CompletionOnceCallback /* callback */,
GURL* /* new_url */) {
return net::OK;

@ -33,6 +33,7 @@ class CastNetworkRequestInterceptor {
virtual bool IsWhiteListed(const GURL& gurl,
const std::string& session_id,
int render_process_id,
int render_frame_id,
bool for_device_auth) const;
virtual void Initialize();
virtual bool IsInitialized();
@ -40,6 +41,7 @@ class CastNetworkRequestInterceptor {
virtual int OnBeforeURLRequest(net::URLRequest* request,
const std::string& session_id,
int render_process_id,
int render_frame_id,
net::CompletionOnceCallback callback,
GURL* new_url);