Bug 74070 - FrameLoaderClient::dispatchDidFinishLoading is invoked while FrameLoader::isLoading() still returns true
Summary: FrameLoaderClient::dispatchDidFinishLoading is invoked while FrameLoader::isL...
Status: NEW
Alias: None
Product: WebKit
Classification: Unclassified
Component: WebKit API (show other bugs)
Version: 528+ (Nightly build)
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Nobody
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-12-08 02:05 PST by Bernhard Bauer
Modified: 2012-01-09 04:26 PST (History)
6 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Bernhard Bauer 2011-12-08 02:05:16 PST
http://crbug.com/105627 contains the following stack trace:

[14867:14867:4346560372:FATAL:missing_plugin.cc(155)] Check failed: !plugin()->web_view()->mainFrame()->isLoading(). 
Backtrace:
	base::debug::StackTrace::StackTrace() [0x1960f52]
	logging::LogMessage::~LogMessage() [0x198a226]
	MissingPlugin::UpdateMessage() [0x1800dad]
	MissingPlugin::DidFinishLoading() [0x1801046]
	webkit::WebViewPlugin::didFinishLoad() [0x3aafd70]
	WebKit::FrameLoaderClientImpl::dispatchDidFinishLoad() [0x28ecdf7]
	WebCore::FrameLoader::checkLoadCompleteForThisFrame() [0x311d922]
	WebCore::FrameLoader::checkLoadComplete() [0x311e0ab]
	WebCore::FrameLoader::checkCompleted() [0x311607e]
	WebCore::FrameLoader::loadDone() [0x3115e30]
	WebCore::CachedResourceLoader::loadDone() [0x3166bfc]
	WebCore::SubresourceLoader::releaseResources() [0x3148598]
	WebCore::ResourceLoader::didFinishLoading() [0x3143da9]
	WebCore::SubresourceLoader::didFinishLoading() [0x314817a]
	WebCore::ResourceLoader::didFinishLoading() [0x31445b7]
	WebCore::ResourceHandleInternal::didFinishLoading() [0x29022c6]
	webkit_glue::WebURLLoaderImpl::Context::OnCompletedRequest() [0x3ad7334]
	webkit_glue::WebURLLoaderImpl::Context::HandleDataURL() [0x3ad7657]
	base::internal::RunnableAdapter<>::Run() [0x3ad86cf]
	base::internal::InvokeHelper<>::MakeItSo() [0x3ad8673]
	base::internal::Invoker<>::Run() [0x3ad85c4]
	base::Callback<>::Run() [0xa5b211]
	MessageLoop::RunTask() [0x198fa6b]
	MessageLoop::DeferOrRunPendingTask() [0x198fb85]
	MessageLoop::DoWork() [0x19903a7]
	base::MessagePumpDefault::Run() [0x19984b4]
	MessageLoop::RunInternal() [0x198f6ed]
	MessageLoop::RunHandler() [0x198f5a0]
	MessageLoop::Run() [0x198eeb3]
	RendererMain() [0x487ae98]
	(anonymous namespace)::RunZygote() [0x42c84ac]
	(anonymous namespace)::RunNamedProcessTypeMain() [0x42c8681]
	content::ContentMain() [0x42c8c16]
	ChromeTestLauncherDelegate::Run() [0x84c189]
	test_launcher::LaunchTests() [0x8a46ef]
	main [0x84bff1]
	0x7f525e42ac4d
	0x437a59

What happens here is that a check fails because WebFrame::isLoading() returns true after WebFrameClient::didFinishLoad has been called. Is there a subtle difference between "loading" as the WebFrame understands it and as the WebFrameClient does?
Comment 1 Brady Eidson 2011-12-08 14:51:32 PST
(In reply to comment #0)

> 
> What happens here is that a check fails because WebFrame::isLoading() returns true after WebFrameClient::didFinishLoad has been called. Is there a subtle difference between "loading" as the WebFrame understands it and as the WebFrameClient does?

I don't know what your WebFrame::isLoading() does.  That's port specific, in the WebKit layer.
Comment 2 Bernhard Bauer 2012-01-09 04:24:47 PST
WebFrame::isLoading() just returns WebCore::FrameLoader::isLoading(), which is not port specific.
Comment 3 jochen 2012-01-09 04:26:41 PST
isLoading() and didFinishLoading are just forwarding to and from FrameLoader