New issue
Advanced search Search tips

Issue 849966 link

Starred by 0 users

Issue metadata

Status: Fixed
Owner:
Closed: Jun 2018
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux , Android , Windows , Chrome , Mac
Pri: 3
Type: Bug



Sign in to add a comment

The certificate requests of Signed Exchange can't be throttled by DevTools

Project Member Reported by horo@chromium.org, Jun 6 2018

Issue description

Chrome Version: TOT 69.0.3450.0

What steps will reproduce the problem?
(1) Enable chrome://flags/#enable-signed-http-exchange
(2) Open DevTools and enable network throttling (ex: Slow 3G)
(3) Open https://htxg-b1.appspot.com/sxg/hello_ec.sxg

What is the expected result?

Both the request to hello_ec.sxg and ec256 (the certificate) must be throttled.

What happens instead?

The request to hello_ec.sxg is throttled.
But the request to ec256 is not throttled.



 

Comment 1 by horo@chromium.org, Jun 6 2018

Status: Started (was: Untriaged)
Project Member

Comment 2 by bugdroid1@chromium.org, Jun 19 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/c1ab712a08cc7dfd4058941b637c4540f4129aca

commit c1ab712a08cc7dfd4058941b637c4540f4129aca
Author: Tsuyoshi Horo <horo@chromium.org>
Date: Tue Jun 19 05:48:13 2018

Stop using x-devtools-emulate-network-conditions-client-id header

To set the throttring network condition using DevTools, currently the special
HTTP header key "x-devtools-emulate-network-conditions-client-id" is used.

But having the special HTTP header is not good for design. The header value is
sometimes accidentally sent to the server (bug:  395966 ,  698905 ,  814568 ,  595229 ).
To avoid this issue and for code health, we should have a flag for it.

This CL introduces |throttling_profile_id| flag in:
 - network::ResourceRequest
And |devtools_token| flag in:
 - blink::ResourceRequest
 - content::NavigationRequestInfo

And creates a ScopedThrottlingToken when net::URLRequest is created in
network::URLLoader and ResourceDispatcherHostImpl to register the profile ID
with the NetLog source ID of the request to ThrottlingController.

And changes ThrottlingController to use the NetLog source ID to lookup the
ThrottlingNetworkInterceptor for the request.

The flag |devtools_token| and |throttling_profile_id| are passed through the
following flow:
For subresource requests:
  - InspectorNetworkAgent::WillSendRequest()
    InspectorNetworkAgent.devtools_token_ -> blink::ResourceRequest
  - WebURLLoaderImpl::Context::Start()
    blink::ResourceRequest -> (WebURLRequest) -> network::ResourceRequest
  * If NetworkService disabled
    - ResourceDispatcherHostImpl::ContinuePendingBeginRequest()
      network::ResourceRequest => ScopedThrottlingToken => ThrottlingController
  * If NetworkService enabled
    - network::URLLoader::URLLoader()
      network::ResourceRequest => ScopedThrottlingToken => ThrottlingController

For main resources (navigation):
  - NavigationRequest::OnStartChecksComplete()
    frame_tree_node_->devtools_frame_token() -> content::NavigationRequestInfo
  - NavigationURLLoaderImpl::NavigationURLLoaderImpl()
    content::NavigationRequestInfo -> network::ResourceRequest
  * If NetworkService disabled
    - ResourceDispatcherHostImpl::BeginNavigationRequest()
      network::ResourceRequest => ScopedThrottlingToken => ThrottlingController
  * If NetworkService enabled
    - network::URLLoader::URLLoader()
      network::ResourceRequest => ScopedThrottlingToken => ThrottlingController

ScopedThrottlingToken calls UnregisterNetLogSource() in the destructor.

Bug:  395966 ,  849966 
Cq-Include-Trybots: luci.chromium.try:linux_mojo
Change-Id: Ic8b428cbea0a5b4fdca3f065f3884ca0e99344e1
Reviewed-on: https://chromium-review.googlesource.com/1086949
Commit-Queue: Tsuyoshi Horo <horo@chromium.org>
Reviewed-by: Dmitry Gozman <dgozman@chromium.org>
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Reviewed-by: Matt Menke <mmenke@chromium.org>
Reviewed-by: Andrey Kosyakov <caseq@chromium.org>
Cr-Commit-Position: refs/heads/master@{#568351}
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/content/browser/devtools/protocol/network_handler.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/content/browser/devtools/protocol/network_handler.h
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/content/browser/devtools/render_frame_devtools_agent_host.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/content/browser/devtools/service_worker_devtools_agent_host.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/content/browser/devtools/shared_worker_devtools_agent_host.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/content/browser/frame_host/navigation_request.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/content/browser/frame_host/navigation_request_info.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/content/browser/frame_host/navigation_request_info.h
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/content/browser/loader/navigation_url_loader_impl.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/content/browser/loader/navigation_url_loader_impl_unittest.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/content/browser/loader/navigation_url_loader_unittest.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/content/browser/loader/resource_dispatcher_host_impl.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/content/browser/loader/resource_dispatcher_host_impl.h
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/content/browser/loader/resource_dispatcher_host_unittest.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/content/browser/loader/resource_loader.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/content/browser/loader/resource_loader.h
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/content/browser/loader/resource_loader_unittest.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/content/browser/service_worker/service_worker_fetch_dispatcher.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/content/renderer/loader/web_url_loader_impl.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/headless/lib/browser/headless_network_delegate.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/headless/lib/headless_devtools_client_browsertest.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/services/network/BUILD.gn
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/services/network/network_context.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/services/network/network_context.h
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/services/network/network_service_unittest.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/services/network/public/cpp/cors/cors.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/services/network/public/cpp/cors/cors_unittest.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/services/network/public/cpp/network_ipc_param_traits.h
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/services/network/public/cpp/resource_request.h
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/services/network/public/mojom/network_context.mojom
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/services/network/test/test_network_context.h
[add] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/services/network/throttling/scoped_throttling_token.cc
[add] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/services/network/throttling/scoped_throttling_token.h
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/services/network/throttling/throttling_controller.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/services/network/throttling/throttling_controller.h
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/services/network/throttling/throttling_controller_unittest.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/services/network/throttling/throttling_network_transaction.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/services/network/throttling/throttling_network_transaction.h
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/services/network/url_loader.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/services/network/url_loader.h
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/third_party/blink/public/platform/web_url_request.h
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/third_party/blink/renderer/core/inspector/inspector_network_agent.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/third_party/blink/renderer/core/inspector/inspector_network_agent.h
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/third_party/blink/renderer/platform/DEPS
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/third_party/blink/renderer/platform/exported/web_url_request.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/third_party/blink/renderer/platform/loader/fetch/raw_resource.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/third_party/blink/renderer/platform/loader/fetch/raw_resource_test.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/third_party/blink/renderer/platform/loader/fetch/resource_request.cc
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/third_party/blink/renderer/platform/loader/fetch/resource_request.h
[modify] https://crrev.com/c1ab712a08cc7dfd4058941b637c4540f4129aca/third_party/blink/renderer/platform/network/http_names.json5

Project Member

Comment 3 by bugdroid1@chromium.org, Jun 19 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/b8d381181d11b0f2e9e2aad70635b69861fa5ba1

commit b8d381181d11b0f2e9e2aad70635b69861fa5ba1
Author: Tsuyoshi Horo <horo@chromium.org>
Date: Tue Jun 19 10:07:29 2018

Set the throttling_profile_id of the signed exchange certificate requests.

This CL copies the throttling_profile_id of the original signed exchange request
to the certificate request, so that we can throttles the certificate requests
using DevTools.

The throttling_profile_id is copied in this flow.
  Navigation case:
    NavigationURLLoaderImpl::URLLoaderRequestController
    => SignedExchangeRequestHandler
    => SignedExchangeLoader
    => SignedExchangeCertFetcherFactory::Create()
    => SignedExchangeCertFetcherFactoryImpl
    => SignedExchangeCertFetcher::CreateAndStart()
    => SignedExchangeCertFetcher
    => network::ResourceRequest

  Prefetch case:
    PrefetchURLLoader::PrefetchURLLoader()
    => SignedExchangePrefetchHandler
    => SignedExchangeLoader
    => ... same as navigation case...

Bug:  849966 
Change-Id: I443af86ca6a465a68e9f4c804d4cd9a9bac12227
Reviewed-on: https://chromium-review.googlesource.com/1088343
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Commit-Queue: Tsuyoshi Horo <horo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#568388}
[modify] https://crrev.com/b8d381181d11b0f2e9e2aad70635b69861fa5ba1/content/browser/loader/navigation_url_loader_impl.cc
[modify] https://crrev.com/b8d381181d11b0f2e9e2aad70635b69861fa5ba1/content/browser/loader/prefetch_url_loader.cc
[modify] https://crrev.com/b8d381181d11b0f2e9e2aad70635b69861fa5ba1/content/browser/loader/prefetch_url_loader.h
[modify] https://crrev.com/b8d381181d11b0f2e9e2aad70635b69861fa5ba1/content/browser/web_package/signed_exchange_cert_fetcher.cc
[modify] https://crrev.com/b8d381181d11b0f2e9e2aad70635b69861fa5ba1/content/browser/web_package/signed_exchange_cert_fetcher.h
[modify] https://crrev.com/b8d381181d11b0f2e9e2aad70635b69861fa5ba1/content/browser/web_package/signed_exchange_cert_fetcher_factory.cc
[modify] https://crrev.com/b8d381181d11b0f2e9e2aad70635b69861fa5ba1/content/browser/web_package/signed_exchange_cert_fetcher_factory.h
[modify] https://crrev.com/b8d381181d11b0f2e9e2aad70635b69861fa5ba1/content/browser/web_package/signed_exchange_cert_fetcher_unittest.cc
[modify] https://crrev.com/b8d381181d11b0f2e9e2aad70635b69861fa5ba1/content/browser/web_package/signed_exchange_loader.cc
[modify] https://crrev.com/b8d381181d11b0f2e9e2aad70635b69861fa5ba1/content/browser/web_package/signed_exchange_loader.h
[modify] https://crrev.com/b8d381181d11b0f2e9e2aad70635b69861fa5ba1/content/browser/web_package/signed_exchange_prefetch_handler.cc
[modify] https://crrev.com/b8d381181d11b0f2e9e2aad70635b69861fa5ba1/content/browser/web_package/signed_exchange_prefetch_handler.h
[modify] https://crrev.com/b8d381181d11b0f2e9e2aad70635b69861fa5ba1/content/browser/web_package/signed_exchange_request_handler.cc
[modify] https://crrev.com/b8d381181d11b0f2e9e2aad70635b69861fa5ba1/content/browser/web_package/signed_exchange_request_handler.h

Comment 4 by horo@chromium.org, Jun 22 2018

Status: Fixed (was: Started)

Sign in to add a comment