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

Issue 618361 link

Starred by 2 users

Issue metadata

Status: Fixed
Owner:
Not on Chrome anymore
Closed: Jun 2016
Cc:
EstimatedDays: ----
NextAction: ----
OS: Linux , Android
Pri: 1
Type: Bug



Sign in to add a comment

DCHECK on startup in NTPSnippetsService::LoadingSnippetsFinished

Project Member Reported by bauerb@chromium.org, Jun 8 2016

Issue description

Chrome version: https://crrev.com/398555

Stack trace (slightly unreadable, sorry):
~LogMessage
ntp_snippets::NTPSnippetsService::LoadingSnippetsFinished()
ntp_snippets::NTPSnippetsService::OnDatabaseLoaded(std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >)
void base::internal::RunnableAdapter<void (ntp_snippets::NTPSnippetsService::*)(std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >)>::Run<ntp_snippets::NTPSnippetsService*, std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > > >(ntp_snippets::NTPSnippetsService*&&, std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >&&)
void base::internal::InvokeHelper<false, void>::MakeItSo<base::internal::RunnableAdapter<void (ntp_snippets::NTPSnippetsService::*)(std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >)>&, ntp_snippets::NTPSnippetsService*, std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > > >(base::internal::RunnableAdapter<void (ntp_snippets::NTPSnippetsService::*)(std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >)>&, ntp_snippets::NTPSnippetsService*&&, std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >&&)
base::internal::Invoker<base::IndexSequence<0u>, base::internal::BindState<base::internal::RunnableAdapter<void (ntp_snippets::NTPSnippetsService::*)(std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >)>, void (ntp_snippets::NTPSnippetsService*, std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >), base::internal::UnretainedWrapper<ntp_snippets::NTPSnippetsService> >, false, void (std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >)>::Run(base::internal::BindStateBase*, std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >&&)
base::Callback<void (std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >), (base::internal::CopyMode)1>::Run(std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >) const
ntp_snippets::NTPSnippetsDatabase::OnDatabaseLoaded(base::Callback<void (std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >), (base::internal::CopyMode)1> const&, bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >)
void base::internal::RunnableAdapter<void (ntp_snippets::NTPSnippetsDatabase::*)(base::Callback<void (std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >), (base::internal::CopyMode)1> const&, bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >)>::Run<ntp_snippets::NTPSnippetsDatabase*, base::Callback<void (std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >), (base::internal::CopyMode)1> const&, bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > > >(ntp_snippets::NTPSnippetsDatabase*&&, base::Callback<void (std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >), (base::internal::CopyMode)1> const&, bool&&, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >&&)
void base::internal::InvokeHelper<true, void>::MakeItSo<base::internal::RunnableAdapter<void (ntp_snippets::NTPSnippetsDatabase::*)(base::Callback<void (std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >), (base::internal::CopyMode)1> const&, bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >)>&, base::WeakPtr<ntp_snippets::NTPSnippetsDatabase>, base::Callback<void (std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >), (base::internal::CopyMode)1> const&, bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > > >(base::internal::RunnableAdapter<void (ntp_snippets::NTPSnippetsDatabase::*)(base::Callback<void (std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >), (base::internal::CopyMode)1> const&, bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >)>&, base::WeakPtr<ntp_snippets::NTPSnippetsDatabase>, base::Callback<void (std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >), (base::internal::CopyMode)1> const&, bool&&, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >&&)
base::internal::Invoker<base::IndexSequence<0u, 1u>, base::internal::BindState<base::internal::RunnableAdapter<void (ntp_snippets::NTPSnippetsDatabase::*)(base::Callback<void (std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >), (base::internal::CopyMode)1> const&, bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >)>, void (ntp_snippets::NTPSnippetsDatabase*, base::Callback<void (std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >), (base::internal::CopyMode)1> const&, bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >), base::WeakPtr<ntp_snippets::NTPSnippetsDatabase>, base::Callback<void (std::__1::vector<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> >, std::__1::allocator<std::__1::unique_ptr<ntp_snippets::NTPSnippet, std::__1::default_delete<ntp_snippets::NTPSnippet> > > >), (base::internal::CopyMode)1> const&>, true, void (bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >)>::Run(base::internal::BindStateBase*, bool&&, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >&&)
base::Callback<void (bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >), (base::internal::CopyMode)1>::Run(bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >) const
void leveldb_proto::(anonymous namespace)::RunLoadCallback<ntp_snippets::SnippetProto>(leveldb_proto::ProtoDatabase<ntp_snippets::SnippetProto>::LoadCallback const&, bool const*, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >)
void base::internal::RunnableAdapter<void (*)(base::Callback<void (bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >), (base::internal::CopyMode)1> const&, bool const*, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >)>::Run<base::Callback<void (bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >), (base::internal::CopyMode)1> const&, bool*, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > > >(base::Callback<void (bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >), (base::internal::CopyMode)1> const&, bool*&&, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >&&)
void base::internal::InvokeHelper<false, void>::MakeItSo<base::internal::RunnableAdapter<void (*)(base::Callback<void (bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >), (base::internal::CopyMode)1> const&, bool const*, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >)>&, base::Callback<void (bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >), (base::internal::CopyMode)1> const&, bool*, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > > >(base::internal::RunnableAdapter<void (*)(base::Callback<void (bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >), (base::internal::CopyMode)1> const&, bool const*, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >)>&, base::Callback<void (bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >), (base::internal::CopyMode)1> const&, bool*&&, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >&&)
base::internal::Invoker<base::IndexSequence<0u, 1u, 2u>, base::internal::BindState<base::internal::RunnableAdapter<void (*)(base::Callback<void (bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >), (base::internal::CopyMode)1> const&, bool const*, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >)>, void (base::Callback<void (bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >), (base::internal::CopyMode)1> const&, bool const*, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >), base::Callback<void (bool, std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > >), (base::internal::CopyMode)1> const&, base::internal::OwnedWrapper<bool>, base::internal::PassedWrapper<std::__1::unique_ptr<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> >, std::__1::default_delete<std::__1::vector<ntp_snippets::SnippetProto, std::__1::allocator<ntp_snippets::SnippetProto> > > > > >, false, void ()>::Run(base::internal::BindStateBase*)
base::Callback<void (), (base::internal::CopyMode)1>::Run() const
base::(anonymous namespace)::PostTaskAndReplyRelay::RunReplyAndSelfDestruct()
base::Callback<void (), (base::internal::CopyMode)1>::Run() const
base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask const&)
base::MessageLoop::RunTask(base::PendingTask const&)
base::MessageLoop::DeferOrRunPendingTask(base::PendingTask const&)
base::MessageLoop::DoWork()
DoRunLoopOnce(_JNIEnv*, base::android::JavaParamRef<_jobject*> const&, long long, long long)
Java_org_chromium_base_SystemMessageHandler_nativeDoRunLoopOnce


Some debugging shows that the state is DISABLED instead of the expected READY.
 
(Copying and pasting the stack trace into a text editor without soft wrap makes the stack frames a bit clearer.)

Comment 2 by dgn@chromium.org, Jun 8 2016

Do you have repro steps? I'm not sure how we can have started a load even though the state is DISABLED. CommandLine flags manipulation maybe?  I could return early in that case but I'd like to know which part of the logic is wrong first.

Comment 3 by treib@chromium.org, Jun 9 2016

Also see bug 618280 - LoadingSnippetsFinished needs some cleanup anyway.
Repro steps:
1. Start up Chrome.

¯\_(ツ)_/¯

No command line flags set manually; I don't know what the state of chrome://flags etc. is. (I doubt it's anything exotic though.)
Cc: -dgn@chromium.org
Owner: dgn@chromium.org
Status: Assigned (was: Unconfirmed)
Actually, this seems pretty straightforward: NTPSnippetsService::OnDatabaseLoaded() calls EnterState(GetStateForDependenciesStatus()), which could transition to the DISABLED state, and then LoadingSnippetsFinished() DCHECKs that it's in the READY state, and that fails.

Comment 6 by treib@chromium.org, Jun 9 2016

Cc: pke@google.com

Comment 7 by pke@google.com, Jun 9 2016

To reproduce, ensure that the database is empty (e.g. uninstall and reinstall Chrome) and the ntp-snippets-flag is enabled.

I think, OnDatabaseLoaded() should check after calling EnterState: "if(!ready()) return;"
In case the service is temporarily disabled, it will (probably) be enabled shortly after, when the sync service has started. I inserted the line above and tested with a newly installed Clankium, account with existing history set up and then ntp-snippets enabled.

Comment 8 by dgn@chromium.org, Jun 9 2016

Ah of course, with no data we would temporarily disable the service, duh. I forgot to test this.

The right fix is possibly to set the sync service listener only after we finished loading from the database, since it needs to know what the previous state was. And when it gets events too early we don't have the final state anyway.
It sounds to me like the issue is that GetStateForDependenciesStatus() has to return a value, even if it can't determine the state. Could we just keep the state the same in that case?

Comment 10 by dgn@chromium.org, Jun 9 2016

Labels: zine-mr-iter-18
Status: Started (was: Assigned)
Hum, that too.
Project Member

Comment 11 by bugdroid1@chromium.org, Jun 9 2016

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

commit df9b2e3b028162b21b4b4a2ce6344bf0c873b9b9
Author: dgn <dgn@chromium.org>
Date: Thu Jun 09 16:41:20 2016

[NTP Snippets] More reliable service initialization

The service was trying to guess if it should be enabled or not
during its initialization if the sync state was not available.
We now wait until the sync service is up to change states.

BUG= 618361 ,618280

Review-Url: https://codereview.chromium.org/2051823003
Cr-Commit-Position: refs/heads/master@{#398914}

[modify] https://crrev.com/df9b2e3b028162b21b4b4a2ce6344bf0c873b9b9/components/ntp_snippets/ntp_snippets_service.cc
[modify] https://crrev.com/df9b2e3b028162b21b4b4a2ce6344bf0c873b9b9/components/ntp_snippets/ntp_snippets_service.h

Comment 12 by dgn@chromium.org, Jun 9 2016

Status: Fixed (was: Started)
Project Member

Comment 13 by bugdroid1@chromium.org, Jun 15 2016

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

commit df9b2e3b028162b21b4b4a2ce6344bf0c873b9b9
Author: dgn <dgn@chromium.org>
Date: Thu Jun 09 16:41:20 2016

[NTP Snippets] More reliable service initialization

The service was trying to guess if it should be enabled or not
during its initialization if the sync state was not available.
We now wait until the sync service is up to change states.

BUG= 618361 ,618280

Review-Url: https://codereview.chromium.org/2051823003
Cr-Commit-Position: refs/heads/master@{#398914}

[modify] https://crrev.com/df9b2e3b028162b21b4b4a2ce6344bf0c873b9b9/components/ntp_snippets/ntp_snippets_service.cc
[modify] https://crrev.com/df9b2e3b028162b21b4b4a2ce6344bf0c873b9b9/components/ntp_snippets/ntp_snippets_service.h

Labels: zine-mr-MVP

Comment 15 by finkm@google.com, Jul 1 2016

Labels: -zine-mr-mvp
Labels: zine-mr-MVP

Sign in to add a comment