diff -r 79859ed3eea9 -r 919f36ff910f webengine/osswebengine/WebCore/loader/FrameLoader.cpp --- a/webengine/osswebengine/WebCore/loader/FrameLoader.cpp Tue Aug 31 16:17:46 2010 +0300 +++ b/webengine/osswebengine/WebCore/loader/FrameLoader.cpp Wed Sep 01 12:28:30 2010 +0100 @@ -62,7 +62,7 @@ #include "IconLoader.h" #include "InspectorController.h" #include "Logging.h" -#include "MimeTypeRegistry.h" +#include "MIMETypeRegistry.h" #include "MainResourceLoader.h" #include "Page.h" #include "PageCache.h" @@ -77,7 +77,7 @@ #include "SystemTime.h" #include "TextResourceDecoder.h" #include "WindowFeatures.h" -#include "xmlhttprequest.h" +#include "XMLHttpRequest.h" #include "XMLTokenizer.h" #include "kjs_binding.h" #include "kjs_proxy.h" @@ -226,6 +226,7 @@ , m_wasUnloadEventEmitted(false) , m_isComplete(false) , m_isLoadingMainResource(false) + , m_mayLoadIconLater(false) , m_cancellingWithLoadInProgress(false) , m_needsClear(false) , m_receivedData(false) @@ -1043,11 +1044,17 @@ void FrameLoader::iconLoadDecisionAvailable() { - if (!m_mayLoadIconLater) - return; LOG(IconDatabase, "FrameLoader %p was told a load decision is available for its icon", this); - startIconLoader(); - m_mayLoadIconLater = false; + if (m_mayLoadIconLater) { + // Notfification came from iconDataBase to load the icon + startIconLoader(); + m_mayLoadIconLater = false; + } else { + // Icon was specified in tag with rel="icon" or rel="shortcut icon" property + if(m_iconLoader) + m_iconLoader->stopLoading(); // cancel previous loading state + startIconLoader(); + } } void FrameLoader::startIconLoader() @@ -1511,13 +1518,16 @@ RenderObject* renderer; IntRect rect; if (!anchorNode) + { renderer = m_frame->document()->renderer(); // top of document + rect = m_frame->document()->getRect(); + } else { renderer = anchorNode->renderer(); rect = anchorNode->getRect(); } if (renderer) - renderer->enclosingLayer()->scrollRectToVisible(rect, RenderLayer::gAlignToEdgeIfNeeded, RenderLayer::gAlignTopAlways); + renderer->enclosingLayer()->scrollRectToVisible(rect, RenderLayer::gAlignToEdgeIfNeeded, RenderLayer::gAlignTopAlways); return true; }