New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 803839 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Feb 2018
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux , Windows
Pri: 2
Type: Bug



Sign in to add a comment

Multiple calls to PolicyBlacklistNavigationThrottle::WillStartRequest after BLOCK_REQUEST.

Project Member Reported by pastarmovj@chromium.org, Jan 19 2018

Issue description

When a navigation to blocked URL happens Chrome calls the PolicyBlacklistNavigationThrottle::WillStartRequest too many times.

IMO it hsould be one call only that blocks the navigation and that's all. Instead Chrome makes 2 calls immediately from different hooks in the request lifecycle and then repeats the second one in 1-2sec and then every couple of seconds again and again.

Verified on linux and windows by setting the URLBlacklist policy to ["example.com"] and navigating from "about:blank" to "example.com".

To reproduce create a file (with any name) in /etc/chromium/policies/managed with the following JSON contents: "{ "URLBlacklist": ["example.com"] }"

Stack traces of each call:


chrome.dll!PolicyBlacklistNavigationThrottle::WillStartRequest() Line 80 (c:\src\chromium\src\components\policy\content\policy_blacklist_navigation_throttle.cc:80)
content.dll!content::NavigationHandleImpl::CheckWillStartRequest() Line 869 (c:\src\chromium\src\content\browser\frame_host\navigation_handle_impl.cc:869)
content.dll!content::NavigationHandleImpl::WillStartRequest(const base::RepeatingCallback<void (content::NavigationThrottle::ThrottleCheckResult)> & callback) Line 575 (c:\src\chromium\src\content\browser\frame_host\navigation_handle_impl.cc:575)
content.dll!content::NavigationRequest::BeginNavigation() Line 503 (c:\src\chromium\src\content\browser\frame_host\navigation_request.cc:503)
content.dll!content::NavigatorImpl::OnBeforeUnloadACK(content::FrameTreeNode * frame_tree_node, bool proceed, const base::TimeTicks & proceed_time) Line 832 (c:\src\chromium\src\content\browser\frame_host\navigator_impl.cc:832)
content.dll!content::RenderFrameHostImpl::OnBeforeUnloadACK(bool proceed, const base::TimeTicks & renderer_before_unload_start_time, const base::TimeTicks & renderer_before_unload_end_time) Line 1872 (c:\src\chromium\src\content\browser\frame_host\render_frame_host_impl.cc:1872)
content.dll!base::DispatchToMethodImpl<content::RenderFrameHostImpl *,void (content::RenderFrameHostImpl::*)(bool, const base::TimeTicks &, const base::TimeTicks &),std::tuple<bool,base::TimeTicks,base::TimeTicks>,0,1,2>(content::RenderFrameHostImpl * const & obj, void(content::RenderFrameHostImpl::*)(bool, const base::TimeTicks &, const base::TimeTicks &) method, std::tuple<bool,base::TimeTicks,base::TimeTicks> && args, std::integer_sequence<unsigned long long,0,1,2>) Line 53 (c:\src\chromium\src\base\tuple.h:53)
content.dll!base::DispatchToMethod<content::RenderFrameHostImpl *,void (content::RenderFrameHostImpl::*)(bool, const base::TimeTicks &, const base::TimeTicks &),std::tuple<bool,base::TimeTicks,base::TimeTicks> >(content::RenderFrameHostImpl * const & obj, void(content::RenderFrameHostImpl::*)(bool, const base::TimeTicks &, const base::TimeTicks &) method, std::tuple<bool,base::TimeTicks,base::TimeTicks> && args) Line 60 (c:\src\chromium\src\base\tuple.h:60)
content.dll!IPC::DispatchToMethod<content::RenderFrameHostImpl,void (content::RenderFrameHostImpl::*)(bool, const base::TimeTicks &, const base::TimeTicks &),void,std::tuple<bool,base::TimeTicks,base::TimeTicks> >(content::RenderFrameHostImpl * obj, void(content::RenderFrameHostImpl::*)(bool, const base::TimeTicks &, const base::TimeTicks &) method, void *, std::tuple<bool,base::TimeTicks,base::TimeTicks> && tuple) Line 51 (c:\src\chromium\src\ipc\ipc_message_templates.h:51)
content.dll!IPC::MessageT<FrameHostMsg_BeforeUnload_ACK_Meta,std::tuple<bool,base::TimeTicks,base::TimeTicks>,void>::Dispatch<content::RenderFrameHostImpl,content::RenderFrameHostImpl,void,void (content::RenderFrameHostImpl::*)(bool, const base::TimeTicks &, const base::TimeTicks &)>(const IPC::Message * msg, content::RenderFrameHostImpl * obj, content::RenderFrameHostImpl * sender, void * parameter, void(content::RenderFrameHostImpl::*)(bool, const base::TimeTicks &, const base::TimeTicks &) func) Line 147 (c:\src\chromium\src\ipc\ipc_message_templates.h:147)
content.dll!content::RenderFrameHostImpl::OnMessageReceived(const IPC::Message & msg) Line 899 (c:\src\chromium\src\content\browser\frame_host\render_frame_host_impl.cc:899)
content.dll!content::RenderProcessHostImpl::OnMessageReceived(const IPC::Message & msg) Line 2919 (c:\src\chromium\src\content\browser\renderer_host\render_process_host_impl.cc:2919)
ipc.dll!IPC::ChannelProxy::Context::OnDispatchMessage(const IPC::Message & message) Line 321 (c:\src\chromium\src\ipc\ipc_channel_proxy.cc:321)
ipc.dll!base::internal::FunctorTraits<void (IPC::ChannelProxy::Context::*)(const IPC::Message &),void>::Invoke<const scoped_refptr<IPC::ChannelProxy::Context> &,const IPC::Message &>(void(IPC::ChannelProxy::Context::*)(const IPC::Message &) method, const scoped_refptr<IPC::ChannelProxy::Context> & receiver_ptr, const IPC::Message & args) Line 211 (c:\src\chromium\src\base\bind_internal.h:211)
ipc.dll!base::internal::InvokeHelper<0,void>::MakeItSo<void (IPC::ChannelProxy::Context::*const &)(const IPC::Message &),const scoped_refptr<IPC::ChannelProxy::Context> &,const IPC::Message &>(void(IPC::ChannelProxy::Context::*)(const IPC::Message &) & functor, const scoped_refptr<IPC::ChannelProxy::Context> & args, const IPC::Message & args) Line 294 (c:\src\chromium\src\base\bind_internal.h:294)
ipc.dll!base::internal::Invoker<base::internal::BindState<void (IPC::ChannelProxy::Context::*)(const IPC::Message &),scoped_refptr<IPC::ChannelProxy::Context>,IPC::Message>,void ()>::RunImpl<void (IPC::ChannelProxy::Context::*const &)(const IPC::Message &),const std::tuple<scoped_refptr<IPC::ChannelProxy::Context>,IPC::Message> &,0,1>(void(IPC::ChannelProxy::Context::*)(const IPC::Message &) & functor, const std::tuple<scoped_refptr<IPC::ChannelProxy::Context>,IPC::Message> & bound, std::integer_sequence<unsigned long long,0,1>) Line 368 (c:\src\chromium\src\base\bind_internal.h:368)
ipc.dll!base::internal::Invoker<base::internal::BindState<void (IPC::ChannelProxy::Context::*)(const IPC::Message &),scoped_refptr<IPC::ChannelProxy::Context>,IPC::Message>,void ()>::Run(base::internal::BindStateBase * base) Line 350 (c:\src\chromium\src\base\bind_internal.h:350)
base.dll!base::OnceCallback<void ()>::Run() Line 65 (c:\src\chromium\src\base\callback.h:65)
base.dll!base::debug::TaskAnnotator::RunTask(const char * queue_function, base::PendingTask * pending_task) Line 55 (c:\src\chromium\src\base\debug\task_annotator.cc:55)
base.dll!base::internal::IncomingTaskQueue::RunTask(base::PendingTask * pending_task) Line 123 (c:\src\chromium\src\base\message_loop\incoming_task_queue.cc:123)

chrome.dll!PolicyBlacklistNavigationThrottle::WillStartRequest() Line 80 (c:\src\chromium\src\components\policy\content\policy_blacklist_navigation_throttle.cc:80)
content.dll!content::NavigationHandleImpl::CheckWillStartRequest() Line 869 (c:\src\chromium\src\content\browser\frame_host\navigation_handle_impl.cc:869)
content.dll!content::NavigationHandleImpl::WillStartRequest(const base::RepeatingCallback<void (content::NavigationThrottle::ThrottleCheckResult)> & callback) Line 575 (c:\src\chromium\src\content\browser\frame_host\navigation_handle_impl.cc:575)
content.dll!content::NavigationRequest::BeginNavigation() Line 503 (c:\src\chromium\src\content\browser\frame_host\navigation_request.cc:503)
content.dll!content::NavigatorImpl::OnBeginNavigation(content::FrameTreeNode * frame_tree_node, const content::CommonNavigationParams & common_params, mojo::StructPtr<content::mojom::BeginNavigationParams> begin_params) Line 902 (c:\src\chromium\src\content\browser\frame_host\navigator_impl.cc:902)
content.dll!content::RenderFrameHostImpl::BeginNavigation(const content::CommonNavigationParams & common_params, mojo::StructPtr<content::mojom::BeginNavigationParams> begin_params) Line 3016 (c:\src\chromium\src\content\browser\frame_host\render_frame_host_impl.cc:3016)
content.dll!content::mojom::FrameHostStubDispatch::Accept(content::mojom::FrameHost * impl, mojo::Message * message) Line 2243 (c:\src\chromium\src\out\Default\gen\content\common\frame.mojom.cc:2243)
content.dll!content::mojom::FrameHostStub<mojo::RawPtrImplRefTraits<content::mojom::FrameHost> >::Accept(mojo::Message * message) Line 798 (c:\src\chromium\src\out\Default\gen\content\common\frame.mojom.h:798)
bindings.dll!mojo::InterfaceEndpointClient::HandleValidatedMessage(mojo::Message * message) Line 419 (c:\src\chromium\src\mojo\public\cpp\bindings\lib\interface_endpoint_client.cc:419)
bindings.dll!mojo::InterfaceEndpointClient::HandleIncomingMessageThunk::Accept(mojo::Message * message) Line 133 (c:\src\chromium\src\mojo\public\cpp\bindings\lib\interface_endpoint_client.cc:133)
bindings.dll!mojo::FilterChain::Accept(mojo::Message * message) Line 40 (c:\src\chromium\src\mojo\public\cpp\bindings\lib\filter_chain.cc:40)
bindings.dll!mojo::InterfaceEndpointClient::HandleIncomingMessage(mojo::Message * message) Line 306 (c:\src\chromium\src\mojo\public\cpp\bindings\lib\interface_endpoint_client.cc:306)
ipc.dll!IPC::`anonymous namespace'::ChannelAssociatedGroupController::AcceptOnProxyThread(mojo::Message message) Line 789 (c:\src\chromium\src\ipc\ipc_mojo_bootstrap.cc:789)
ipc.dll!base::internal::FunctorTraits<void (IPC::(anonymous namespace)::ChannelAssociatedGroupController::*)(mojo::Message),void>::Invoke<const scoped_refptr<IPC::(anonymous namespace)::ChannelAssociatedGroupController> &,mojo::Message>(void(IPC::`anonymous namespace'::ChannelAssociatedGroupController::*)(mojo::Message) method, const scoped_refptr<IPC::(anonymous namespace)::ChannelAssociatedGroupController> & receiver_ptr, mojo::Message && args) Line 211 (c:\src\chromium\src\base\bind_internal.h:211)
ipc.dll!base::internal::InvokeHelper<0,void>::MakeItSo<void (IPC::(anonymous namespace)::ChannelAssociatedGroupController::*const &)(mojo::Message),const scoped_refptr<IPC::(anonymous namespace)::ChannelAssociatedGroupController> &,mojo::Message>(void(IPC::`anonymous namespace'::ChannelAssociatedGroupController::*)(mojo::Message) & functor, const scoped_refptr<IPC::(anonymous namespace)::ChannelAssociatedGroupController> & args, mojo::Message && args) Line 294 (c:\src\chromium\src\base\bind_internal.h:294)
ipc.dll!base::internal::Invoker<base::internal::BindState<void (IPC::(anonymous namespace)::ChannelAssociatedGroupController::*)(mojo::Message),scoped_refptr<IPC::(anonymous namespace)::ChannelAssociatedGroupController>,base::internal::PassedWrapper<mojo::Message> >,void ()>::RunImpl<void (IPC::(anonymous namespace)::ChannelAssociatedGroupController::*const &)(mojo::Message),const std::tuple<scoped_refptr<IPC::(anonymous namespace)::ChannelAssociatedGroupController>,base::internal::PassedWrapper<mojo::Message> > &,0,1>(void(IPC::`anonymous namespace'::ChannelAssociatedGroupController::*)(mojo::Message) & functor, const std::tuple<scoped_refptr<IPC::(anonymous namespace)::ChannelAssociatedGroupController>,base::internal::PassedWrapper<mojo::Message> > & bound, std::integer_sequence<unsigned long long,0,1>) Line 368 (c:\src\chromium\src\base\bind_internal.h:368)
ipc.dll!base::internal::Invoker<base::internal::BindState<void (IPC::(anonymous namespace)::ChannelAssociatedGroupController::*)(mojo::Message),scoped_refptr<IPC::(anonymous namespace)::ChannelAssociatedGroupController>,base::internal::PassedWrapper<mojo::Message> >,void ()>::Run(base::internal::BindStateBase * base) Line 350 (c:\src\chromium\src\base\bind_internal.h:350)
base.dll!base::OnceCallback<void ()>::Run() Line 65 (c:\src\chromium\src\base\callback.h:65)
base.dll!base::debug::TaskAnnotator::RunTask(const char * queue_function, base::PendingTask * pending_task) Line 55 (c:\src\chromium\src\base\debug\task_annotator.cc:55)
base.dll!base::internal::IncomingTaskQueue::RunTask(base::PendingTask * pending_task) Line 123 (c:\src\chromium\src\base\message_loop\incoming_task_queue.cc:123)

chrome.dll!PolicyBlacklistNavigationThrottle::WillStartRequest() Line 80 (c:\src\chromium\src\components\policy\content\policy_blacklist_navigation_throttle.cc:80)
content.dll!content::NavigationHandleImpl::CheckWillStartRequest() Line 869 (c:\src\chromium\src\content\browser\frame_host\navigation_handle_impl.cc:869)
content.dll!content::NavigationHandleImpl::WillStartRequest(const base::RepeatingCallback<void (content::NavigationThrottle::ThrottleCheckResult)> & callback) Line 575 (c:\src\chromium\src\content\browser\frame_host\navigation_handle_impl.cc:575)
content.dll!content::NavigationRequest::BeginNavigation() Line 503 (c:\src\chromium\src\content\browser\frame_host\navigation_request.cc:503)
content.dll!content::NavigatorImpl::OnBeginNavigation(content::FrameTreeNode * frame_tree_node, const content::CommonNavigationParams & common_params, mojo::StructPtr<content::mojom::BeginNavigationParams> begin_params) Line 902 (c:\src\chromium\src\content\browser\frame_host\navigator_impl.cc:902)
content.dll!content::RenderFrameHostImpl::BeginNavigation(const content::CommonNavigationParams & common_params, mojo::StructPtr<content::mojom::BeginNavigationParams> begin_params) Line 3016 (c:\src\chromium\src\content\browser\frame_host\render_frame_host_impl.cc:3016)
content.dll!content::mojom::FrameHostStubDispatch::Accept(content::mojom::FrameHost * impl, mojo::Message * message) Line 2243 (c:\src\chromium\src\out\Default\gen\content\common\frame.mojom.cc:2243)
content.dll!content::mojom::FrameHostStub<mojo::RawPtrImplRefTraits<content::mojom::FrameHost> >::Accept(mojo::Message * message) Line 798 (c:\src\chromium\src\out\Default\gen\content\common\frame.mojom.h:798)
bindings.dll!mojo::InterfaceEndpointClient::HandleValidatedMessage(mojo::Message * message) Line 419 (c:\src\chromium\src\mojo\public\cpp\bindings\lib\interface_endpoint_client.cc:419)
bindings.dll!mojo::InterfaceEndpointClient::HandleIncomingMessageThunk::Accept(mojo::Message * message) Line 133 (c:\src\chromium\src\mojo\public\cpp\bindings\lib\interface_endpoint_client.cc:133)
bindings.dll!mojo::FilterChain::Accept(mojo::Message * message) Line 40 (c:\src\chromium\src\mojo\public\cpp\bindings\lib\filter_chain.cc:40)
bindings.dll!mojo::InterfaceEndpointClient::HandleIncomingMessage(mojo::Message * message) Line 306 (c:\src\chromium\src\mojo\public\cpp\bindings\lib\interface_endpoint_client.cc:306)
ipc.dll!IPC::`anonymous namespace'::ChannelAssociatedGroupController::AcceptOnProxyThread(mojo::Message message) Line 789 (c:\src\chromium\src\ipc\ipc_mojo_bootstrap.cc:789)
ipc.dll!base::internal::FunctorTraits<void (IPC::(anonymous namespace)::ChannelAssociatedGroupController::*)(mojo::Message),void>::Invoke<const scoped_refptr<IPC::(anonymous namespace)::ChannelAssociatedGroupController> &,mojo::Message>(void(IPC::`anonymous namespace'::ChannelAssociatedGroupController::*)(mojo::Message) method, const scoped_refptr<IPC::(anonymous namespace)::ChannelAssociatedGroupController> & receiver_ptr, mojo::Message && args) Line 211 (c:\src\chromium\src\base\bind_internal.h:211)
ipc.dll!base::internal::InvokeHelper<0,void>::MakeItSo<void (IPC::(anonymous namespace)::ChannelAssociatedGroupController::*const &)(mojo::Message),const scoped_refptr<IPC::(anonymous namespace)::ChannelAssociatedGroupController> &,mojo::Message>(void(IPC::`anonymous namespace'::ChannelAssociatedGroupController::*)(mojo::Message) & functor, const scoped_refptr<IPC::(anonymous namespace)::ChannelAssociatedGroupController> & args, mojo::Message && args) Line 294 (c:\src\chromium\src\base\bind_internal.h:294)
ipc.dll!base::internal::Invoker<base::internal::BindState<void (IPC::(anonymous namespace)::ChannelAssociatedGroupController::*)(mojo::Message),scoped_refptr<IPC::(anonymous namespace)::ChannelAssociatedGroupController>,base::internal::PassedWrapper<mojo::Message> >,void ()>::RunImpl<void (IPC::(anonymous namespace)::ChannelAssociatedGroupController::*const &)(mojo::Message),const std::tuple<scoped_refptr<IPC::(anonymous namespace)::ChannelAssociatedGroupController>,base::internal::PassedWrapper<mojo::Message> > &,0,1>(void(IPC::`anonymous namespace'::ChannelAssociatedGroupController::*)(mojo::Message) & functor, const std::tuple<scoped_refptr<IPC::(anonymous namespace)::ChannelAssociatedGroupController>,base::internal::PassedWrapper<mojo::Message> > & bound, std::integer_sequence<unsigned long long,0,1>) Line 368 (c:\src\chromium\src\base\bind_internal.h:368)
ipc.dll!base::internal::Invoker<base::internal::BindState<void (IPC::(anonymous namespace)::ChannelAssociatedGroupController::*)(mojo::Message),scoped_refptr<IPC::(anonymous namespace)::ChannelAssociatedGroupController>,base::internal::PassedWrapper<mojo::Message> >,void ()>::Run(base::internal::BindStateBase * base) Line 350 (c:\src\chromium\src\base\bind_internal.h:350)
base.dll!base::OnceCallback<void ()>::Run() Line 65 (c:\src\chromium\src\base\callback.h:65)
base.dll!base::debug::TaskAnnotator::RunTask(const char * queue_function, base::PendingTask * pending_task) Line 55 (c:\src\chromium\src\base\debug\task_annotator.cc:55)
base.dll!base::internal::IncomingTaskQueue::RunTask(base::PendingTask * pending_task) Line 123 (c:\src\chromium\src\base\message_loop\incoming_task_queue.cc:123)



 

Comment 1 by dougt@chromium.org, Jan 19 2018

Cc: kinuko@chromium.org jam@chromium.org nasko@chromium.org

Comment 2 by dougt@chromium.org, Jan 19 2018

Status: Available (was: Untriaged)
I can reproduce locally too.  I see two OnBeginNavigation with very similar navigation_handle_'s.  The source_location_ for both is chrome-error://chromewebdata/ which makes me think that the loads are related to the site blocking error page:


-		navigation_handle_	unique_ptr {url_="http://www.example.com/" starting_site_instance_=[8] 0x38bfaa00 RefCount: 8 sanitized_referrer_=...}	std::unique_ptr<content::NavigationHandleImpl,std::default_delete<content::NavigationHandleImpl> >
-		[ptr]	0x3950e830 {url_="http://www.example.com/" starting_site_instance_=[8] 0x38bfaa00 RefCount: 8 sanitized_referrer_=...}	content::NavigationHandleImpl *
+		content::NavigationHandle	{...}	content::NavigationHandle
+		url_	"http://www.example.com/"	GURL
+		starting_site_instance_	[8] 0x38bfaa00 RefCount: 8	scoped_refptr<content::SiteInstance>
+		sanitized_referrer_	{url="" policy=kWebReferrerPolicyNoReferrerWhenDowngrade (2) }	content::Referrer
		has_user_gesture_	false	bool
		transition_	PAGE_TRANSITION_FIRST (0)	ui::PageTransition
		is_external_protocol_	false	bool
		net_error_code_	OK (0)	net::Error
+		render_frame_host_	0x00000000 <NULL>	content::RenderFrameHostImpl *
		is_renderer_initiated_	true	const bool
		is_same_document_	false	const bool
		was_redirected_	false	bool
		did_replace_entry_	false	bool
		should_update_history_	false	bool
		subframe_entry_committed_	false	bool
+		response_headers_	null	scoped_refptr<net::HttpResponseHeaders>
		connection_info_	CONNECTION_INFO_UNKNOWN (0)	net::HttpResponseInfo::ConnectionInfo
+		ssl_info_	{cert=null unverified_cert=null cert_status=0 ...}	net::SSLInfo
+		original_url_	"http://www.example.com/"	const GURL
+		site_url_	"http://example.com/"	GURL
+		method_	"GET"	std::basic_string<char,std::char_traits<char>,std::allocator<char> >
+		resource_request_body_	null	scoped_refptr<network::ResourceRequestBody>
		state_	WILL_SEND_REQUEST (1)	content::NavigationHandleImpl::State
		is_transferring_	false	bool
+		frame_tree_node_	0x38e1a840 {frame_tree_=0x3582cb20 {render_frame_delegate_=0x3582ca20 {delegate_=0x355b469c {interstitial_observers_=...} ...} ...} ...}	content::FrameTreeNode *
+		throttles_	{ size=8 }	std::vector<std::unique_ptr<content::NavigationThrottle,std::default_delete<content::NavigationThrottle> >,std::allocator<std::unique_ptr<content::NavigationThrottle,std::default_delete<content::NavigationThrottle> > > >
		next_index_	0	unsigned int
+		navigation_start_	{...}	const base::TimeTicks
+		ready_to_commit_time_	{...}	base::TimeTicks
		pending_nav_entry_id_	28	int
		request_context_type_	REQUEST_CONTEXT_TYPE_INTERNAL (17)	content::RequestContextType
		mixed_content_context_type_	kBlockable (1)	blink::WebMixedContentContextType
+		complete_callback_	{...}	base::RepeatingCallback<void (content::NavigationThrottle::ThrottleCheckResult)>
+		complete_callback_for_testing_	{...}	base::RepeatingCallback<void (content::NavigationThrottle::ThrottleCheckResult)>
+		service_worker_handle_	empty	std::unique_ptr<content::ServiceWorkerNavigationHandle,std::default_delete<content::ServiceWorkerNavigationHandle> >
+		appcache_handle_	empty	std::unique_ptr<content::AppCacheNavigationHandle,std::default_delete<content::AppCacheNavigationHandle> >
+		navigation_data_	empty	std::unique_ptr<content::NavigationData,std::default_delete<content::NavigationData> >
+		navigation_ui_data_	unique_ptr {...}	std::unique_ptr<content::NavigationUIData,std::default_delete<content::NavigationUIData> >
		navigation_id_	21	__int64
+		request_id_	{child_id=-1 request_id=-1 }	content::GlobalRequestID
		should_replace_current_entry_	false	bool
+		redirect_chain_	{ size=1 }	std::vector<GURL,std::allocator<GURL> >
		is_download_	false	bool
		is_stream_	false	bool
		started_from_context_menu_	false	bool
		reload_type_	NONE (0)	content::ReloadType
		restore_type_	NONE (3)	content::RestoreType
+		searchable_form_url_	""	GURL
+		searchable_form_encoding_	""	std::basic_string<char,std::char_traits<char>,std::allocator<char> >
+		previous_url_	""	GURL
+		base_url_	""	GURL
+		base_url_for_data_url_	""	GURL
+		socket_address_	{host_="" port_=0 }	net::HostPortPair
		navigation_type_	NAVIGATION_TYPE_UNKNOWN (0)	content::NavigationType
		should_check_main_world_csp_	CHECK (1)	content::CSPDisposition
		is_form_submission_	false	bool
+		source_location_	{url="chrome-error://chromewebdata/" line_number=0 column_number=0 }	content::SourceLocation
		expected_render_process_host_id_	-1	int
+		on_defer_callback_for_testing_	{...}	base::RepeatingCallback<void ()>
+		suggested_filename_	(null)	base::Optional<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >
+		weak_factory_	{...}	base::WeakPtrFactory<content::NavigationHandleImpl>



Attached in a chrome:tracing file for navigation.  I only see one Navigation StartToCommit but there are two navigation handles.  One that starts a bit before 8s taking 1.6s and another before 10s taking 27.5ms.  The second one looks instantaneous.  Nasko, does this make sense?



Debugging Note:

To add something to the blacklist on windows, see:
  https://www.chromium.org/administrators/policy-list-3#URLBlacklist

You'll want a key in: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Chromium\URLBlacklist








trace_example.com_load.json.gz
340 KB Download

Comment 3 by dougt@chromium.org, Jan 23 2018

Cc: dougt@chromium.org
Owner: nasko@chromium.org
Cc: arthurso...@chromium.org clamy@chromium.org
Owner: arthurso...@chromium.org
I will take a look.
Status: Started (was: Available)
Okay it's easy, that was what I thought it was.

That's the auto-reload feature. Some error pages are automatically reloaded after a delay of {5s, 30s, 60s, 5min, 10min, 30min}.
PolicyBlacklistNavigationThrottle use net::ERR_BLOCKED_BY_ADMINISTRATOR, which is not blacklisted in IsReloadableError():
┌──┬───────────────────────────────────────────────────────────────────────────┐
│1 │bool NetErrorHelperCore::IsReloadableError(                                │
│2 │    const NetErrorHelperCore::ErrorPageInfo& info) {                       │
│3 │  GURL url = info.error.url();                                             │
│4 │  return info.error.domain() == net::kErrorDomain &&                       │
│5 │         info.error.reason() != net::ERR_ABORTED &&                        │
│6 │         // For now, net::ERR_UNKNOWN_URL_SCHEME is only being displayed on│
│7 │         // Chrome for Android.                                            │
│8 │         info.error.reason() != net::ERR_UNKNOWN_URL_SCHEME &&             │
│9 │         // Do not trigger if the server rejects a client certificate.     │
│10│         //  https://crbug.com/431387                                        │
│11│         !net::IsClientCertificateError(info.error.reason()) &&            │
│12│         // Some servers reject client certificates with a generic         │
│13│         // handshake_failure alert.                                       │
│14│         //  https://crbug.com/431387                                        │
│15│         info.error.reason() != net::ERR_SSL_PROTOCOL_ERROR &&             │
│16│         // Do not trigger for XSS Auditor violations.                     │
│17│         info.error.reason() != net::ERR_BLOCKED_BY_XSS_AUDITOR &&         │
│18│         !info.was_failed_post &&                                          │
│19│         // Don't auto-reload non-http/https schemas.                      │
│20│         //  https://crbug.com/471713                                        │
│21│         url.SchemeIsHTTPOrHTTPS();                                        │
│22│}                                                                          │
└──┴───────────────────────────────────────────────────────────────────────────┘

I guess we want to exclude this error page (???) Let me know if you don't think so.
In the meantime, I will make a patch.
First of all kudos on the amazing ASCII art :) How did you produce this table?

Next I think this page can safely be changed to non-reloadable error page as it is not something that changes so often. In the unlikely case that the admin changes their policy the user can still reload themselves.

Thanks for looking into this!
Thanks! So we can commit this patch as is.

--
FYI: I am not really sure if putting ASCII art like this is appropriate here, but thanks! :)
I made this table using a personal project I started. It's a webassembly C++ APP that convert some markdown-like diagram into ASCII-art diagram.

It's a collection of tools. In the first one, I wanted to describe race conditions in Chrome easily using only text:

  1) Renderer -> Browser: BeginNavigation()
  2) Browser -> Network: URLRequest()
  3) Browser <- Network: URLResponse()
  4) Renderer <- Browser: CommitNavigation()
  5) Renderer -> Browser: BeginNavigation() (again)

  Renderer: 5<4
  Browser: 4<5

Gives:

 ┌────────┐                ┌───────┐     ┌───────┐
 │Renderer│                │Browser│     │Network│
 └───┬────┘                └───┬───┘     └───┬───┘
     │                         │             │    
     │    BeginNavigation()    │             │    
     │────────────────────────>│             │    
     │                         │             │    
     │                         │URLRequest() │    
     │                         │────────────>│    
     │                         │             │    
     │                         │URLResponse()│    
     │                         │<────────────│    
     │                         │             │    
     │──┐                      │             │    
     │  │CommitNavigation()    │             │    
     │<────────────────────────│             │    
     │  │                      │             │    
     │BeginNavigation() (again)│             │    
     │  └─────────────────────>│             │    
 ┌───┴────┐                ┌───┴───┐     ┌───┴───┐
 │Renderer│                │Browser│     │Network│
 └────────┘                └───────┘     └───────┘

I will send you a link, but it's still under development.
Project Member

Comment 9 by bugdroid1@chromium.org, Feb 12 2018

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

commit abf5cdcecc0b6fa91790e2f969387e8bde0e4214
Author: arthursonzogni <arthursonzogni@chromium.org>
Date: Mon Feb 12 12:29:21 2018

Do not auto-reload blacklisted URL.

For URLs blocked by the administrator, stop trying to reloading it
automatically after the error page has been displayed.

Bug:  803839 
Change-Id: Ifef147df57e15c58efc58d871aa057e4e09f54c3
Reviewed-on: https://chromium-review.googlesource.com/911250
Commit-Queue: Arthur Sonzogni <arthursonzogni@chromium.org>
Reviewed-by: Julia Tuttle <juliatuttle@chromium.org>
Reviewed-by: Julian Pastarmov <pastarmovj@chromium.org>
Cr-Commit-Position: refs/heads/master@{#536064}
[modify] https://crrev.com/abf5cdcecc0b6fa91790e2f969387e8bde0e4214/chrome/renderer/net/net_error_helper_core.cc
[modify] https://crrev.com/abf5cdcecc0b6fa91790e2f969387e8bde0e4214/chrome/renderer/net/net_error_helper_core_unittest.cc

Status: Fixed (was: Started)

Sign in to add a comment