DCHECK on startup in NTPSnippetsService::LoadingSnippetsFinished |
||||||||
Issue descriptionChrome 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.
,
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.
,
Jun 9 2016
Also see bug 618280 - LoadingSnippetsFinished needs some cleanup anyway.
,
Jun 9 2016
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.)
,
Jun 9 2016
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.
,
Jun 9 2016
,
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.
,
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.
,
Jun 9 2016
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?
,
Jun 9 2016
Hum, that too.
,
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
,
Jun 9 2016
,
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
,
Jul 1 2016
,
Jul 1 2016
,
Jul 1 2016
|
||||||||
►
Sign in to add a comment |
||||||||
Comment 1 by bauerb@chromium.org
, Jun 8 2016