Multiple calls to PolicyBlacklistNavigationThrottle::WillStartRequest after BLOCK_REQUEST. |
|||||||
Issue descriptionWhen 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)
,
Jan 19 2018
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
,
Jan 23 2018
,
Feb 8 2018
,
Feb 9 2018
I will take a look.
,
Feb 9 2018
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.
,
Feb 12 2018
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!
,
Feb 12 2018
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.
,
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
,
Feb 12 2018
|
|||||||
►
Sign in to add a comment |
|||||||
Comment 1 by dougt@chromium.org
, Jan 19 2018