webengine/osswebengine/WebCore/loader/FrameLoader.cpp
changeset 27 6297cdf66332
parent 11 c8a366e56285
child 46 30342f40acbf
--- a/webengine/osswebengine/WebCore/loader/FrameLoader.cpp	Thu Jan 07 13:31:38 2010 +0200
+++ b/webengine/osswebengine/WebCore/loader/FrameLoader.cpp	Mon Jan 18 21:20:18 2010 +0200
@@ -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 <link> tag with rel="icon" or rel="shortcut icon" property
+        if(m_iconLoader)
+            m_iconLoader->stopLoading(); // cancel previous loading state
+        startIconLoader();
+    }
 }
 
 void FrameLoader::startIconLoader()
@@ -1517,7 +1524,17 @@
         rect = anchorNode->getRect();
     }
     if (renderer)
-        renderer->enclosingLayer()->scrollRectToVisible(rect, RenderLayer::gAlignToEdgeIfNeeded, RenderLayer::gAlignTopAlways);
+        {
+         if(!anchorNode)
+            {
+            renderer->enclosingLayer()->scrollRectToVisible(rect, RenderLayer::gAlignToEdgeIfNeeded, RenderLayer::gAlignToEdgeIfNeeded);
+            }
+         else
+             {
+             renderer->enclosingLayer()->scrollRectToVisible(rect, RenderLayer::gAlignToEdgeIfNeeded, RenderLayer::gAlignTopAlways);                         
+             }
+       
+        }
 
     return true;
 }