CTTE: IconController and IconLoader should have Frame& backpointer.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 5 Oct 2013 04:48:33 +0000 (04:48 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 5 Oct 2013 04:48:33 +0000 (04:48 +0000)
<https://webkit.org/b/122372>

Reviewed by Anders Carlsson.

Also slap IconLoader with FINAL glove.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@156945 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/loader/FrameLoader.cpp
Source/WebCore/loader/icon/IconController.cpp
Source/WebCore/loader/icon/IconController.h
Source/WebCore/loader/icon/IconLoader.cpp
Source/WebCore/loader/icon/IconLoader.h

index ac6e3c7..0dd07c2 100644 (file)
@@ -1,5 +1,14 @@
 2013-10-04  Andreas Kling  <akling@apple.com>
 
+        CTTE: IconController and IconLoader should have Frame& backpointer.
+        <https://webkit.org/b/122372>
+
+        Reviewed by Anders Carlsson.
+
+        Also slap IconLoader with FINAL glove.
+
+2013-10-04  Andreas Kling  <akling@apple.com>
+
         CTTE: RenderScrollbar DOM owner is always an Element.
         <https://webkit.org/b/122348>
 
index 3200b24..217d2db 100644 (file)
@@ -218,7 +218,7 @@ FrameLoader::FrameLoader(Frame& frame, FrameLoaderClient& client)
     , m_history(adoptPtr(new HistoryController(frame)))
     , m_notifer(&frame)
     , m_subframeLoader(adoptPtr(new SubframeLoader(frame)))
-    , m_icon(adoptPtr(new IconController(&frame)))
+    , m_icon(adoptPtr(new IconController(frame)))
     , m_mixedContentChecker(&frame)
     , m_state(FrameStateProvisional)
     , m_loadType(FrameLoadTypeStandard)
index 46d41c0..176bf91 100644 (file)
@@ -50,7 +50,7 @@
 
 namespace WebCore {
 
-IconController::IconController(Frame* frame)
+IconController::IconController(Frame& frame)
     : m_frame(frame)
     , m_waitingForLoadDecision(false)
 {
@@ -69,7 +69,7 @@ URL IconController::url()
 IconURL IconController::iconURL(IconType iconType) const
 {
     IconURL result;
-    const Vector<IconURL>& iconURLs = m_frame->document()->iconURLs(iconType);
+    const Vector<IconURL>& iconURLs = m_frame.document()->iconURLs(iconType);
     Vector<IconURL>::const_iterator iter(iconURLs.begin());
     for (; iter != iconURLs.end(); ++iter) {
         if (result.m_iconURL.isEmpty() || !iter->m_mimeType.isEmpty())
@@ -82,7 +82,7 @@ IconURL IconController::iconURL(IconType iconType) const
 IconURLs IconController::urlsForTypes(int iconTypesMask)
 {
     IconURLs iconURLs;
-    if (m_frame->tree().parent())
+    if (m_frame.tree().parent())
         return iconURLs;
         
     if (iconTypesMask & Favicon && !appendToIconURLs(Favicon, &iconURLs))
@@ -104,7 +104,7 @@ IconURLs IconController::urlsForTypes(int iconTypesMask)
 #endif
 
     // Finally, append all remaining icons of this type.
-    const Vector<IconURL>& allIconURLs = m_frame->document()->iconURLs(iconTypesMask);
+    const Vector<IconURL>& allIconURLs = m_frame.document()->iconURLs(iconTypesMask);
     for (Vector<IconURL>::const_iterator iter = allIconURLs.begin(); iter != allIconURLs.end(); ++iter) {
         int i;
         int iconCount = iconURLs.size();
@@ -121,9 +121,9 @@ IconURLs IconController::urlsForTypes(int iconTypesMask)
 
 void IconController::commitToDatabase(const URL& icon)
 {
-    LOG(IconDatabase, "Committing iconURL %s to database for pageURLs %s and %s", icon.string().ascii().data(), m_frame->document()->url().string().ascii().data(), m_frame->loader().initialRequest().url().string().ascii().data());
-    iconDatabase().setIconURLForPageURL(icon.string(), m_frame->document()->url().string());
-    iconDatabase().setIconURLForPageURL(icon.string(), m_frame->loader().initialRequest().url().string());
+    LOG(IconDatabase, "Committing iconURL %s to database for pageURLs %s and %s", icon.string().ascii().data(), m_frame.document()->url().string().ascii().data(), m_frame.loader().initialRequest().url().string().ascii().data());
+    iconDatabase().setIconURLForPageURL(icon.string(), m_frame.document()->url().string());
+    iconDatabase().setIconURLForPageURL(icon.string(), m_frame.loader().initialRequest().url().string());
 }
 
 void IconController::startLoader()
@@ -131,14 +131,14 @@ void IconController::startLoader()
     // FIXME: We kick off the icon loader when the frame is done receiving its main resource.
     // But we should instead do it when we're done parsing the head element.
 
-    if (!m_frame->isMainFrame())
+    if (!m_frame.isMainFrame())
         return;
 
     if (!iconDatabase().isEnabled())
         return;
 
-    ASSERT(!m_frame->tree().parent());
-    if (!documentCanHaveIcon(m_frame->document()->url()))
+    ASSERT(!m_frame.tree().parent());
+    if (!documentCanHaveIcon(m_frame.document()->url()))
         return;
 
     URL iconURL(url());
@@ -148,24 +148,24 @@ void IconController::startLoader()
 
     // People who want to avoid loading images generally want to avoid loading all images, unless an exception has been made for site icons.
     // Now that we've accounted for URL mapping, avoid starting the network load if images aren't set to display automatically.
-    if (!m_frame->settings().loadsImagesAutomatically() && !m_frame->settings().loadsSiteIconsIgnoringImageLoadingSetting())
+    if (!m_frame.settings().loadsImagesAutomatically() && !m_frame.settings().loadsSiteIconsIgnoringImageLoadingSetting())
         return;
 
     // If we're reloading the page, always start the icon load now.
     // FIXME: How can this condition ever be true?
-    if (m_frame->loader().loadType() == FrameLoadTypeReload && m_frame->loader().loadType() == FrameLoadTypeReloadFromOrigin) {
+    if (m_frame.loader().loadType() == FrameLoadTypeReload && m_frame.loader().loadType() == FrameLoadTypeReloadFromOrigin) {
         continueLoadWithDecision(IconLoadYes);
         return;
     }
 
     if (iconDatabase().supportsAsynchronousMode()) {
-        m_frame->loader().documentLoader()->getIconLoadDecisionForIconURL(urlString);
+        m_frame.loader().documentLoader()->getIconLoadDecisionForIconURL(urlString);
         // Commit the icon url mapping to the database just in case we don't end up loading later.
         commitToDatabase(iconURL);
         return;
     }
 
-    IconLoadDecision decision = iconDatabase().synchronousLoadDecisionForIconURL(urlString, m_frame->loader().documentLoader());
+    IconLoadDecision decision = iconDatabase().synchronousLoadDecisionForIconURL(urlString, m_frame.loader().documentLoader());
 
     if (decision == IconLoadUnknown) {
         // In this case, we may end up loading the icon later, but we still want to commit the icon url mapping to the database
@@ -174,7 +174,7 @@ void IconController::startLoader()
         // icon is later read in from disk
         LOG(IconDatabase, "IconController %p might load icon %s later", this, urlString.ascii().data());
         m_waitingForLoadDecision = true;    
-        m_frame->loader().client().registerForIconNotification();
+        m_frame.loader().client().registerForIconNotification();
         commitToDatabase(iconURL);
         return;
     }
@@ -203,7 +203,7 @@ void IconController::continueLoadWithDecision(IconLoadDecision iconLoadDecision)
     ASSERT(iconLoadDecision != IconLoadUnknown);
 
     //  FIXME (<rdar://problem/9168605>) - We should support in-memory-only private browsing icons in asynchronous icon database mode.
-    if (iconDatabase().supportsAsynchronousMode() && m_frame->page()->settings().privateBrowsingEnabled())
+    if (iconDatabase().supportsAsynchronousMode() && m_frame.page()->settings().privateBrowsingEnabled())
         return;
 
     if (iconLoadDecision == IconLoadNo) {
@@ -216,7 +216,7 @@ void IconController::continueLoadWithDecision(IconLoadDecision iconLoadDecision)
         commitToDatabase(iconURL);
 
         if (iconDatabase().supportsAsynchronousMode()) {
-            m_frame->loader().documentLoader()->getIconDataForIconURL(urlString);
+            m_frame.loader().documentLoader()->getIconDataForIconURL(urlString);
             return;
         }
 
@@ -226,17 +226,17 @@ void IconController::continueLoadWithDecision(IconLoadDecision iconLoadDecision)
         // Otherwise if the icon data *is* available, notify the delegate
         if (!iconDatabase().synchronousIconDataKnownForIconURL(urlString)) {
             LOG(IconDatabase, "Told not to load icon %s but icon data is not yet available - registering for notification and requesting load from disk", urlString.ascii().data());
-            m_frame->loader().client().registerForIconNotification();
-            iconDatabase().synchronousIconForPageURL(m_frame->document()->url().string(), IntSize(0, 0));
-            iconDatabase().synchronousIconForPageURL(m_frame->loader().initialRequest().url().string(), IntSize(0, 0));
+            m_frame.loader().client().registerForIconNotification();
+            iconDatabase().synchronousIconForPageURL(m_frame.document()->url().string(), IntSize(0, 0));
+            iconDatabase().synchronousIconForPageURL(m_frame.loader().initialRequest().url().string(), IntSize(0, 0));
         } else
-            m_frame->loader().client().dispatchDidReceiveIcon();
+            m_frame.loader().client().dispatchDidReceiveIcon();
 
         return;
     } 
 
     if (!m_iconLoader)
-        m_iconLoader = IconLoader::create(m_frame);
+        m_iconLoader = std::make_unique<IconLoader>(m_frame);
 
     m_iconLoader->startLoading();
 }
@@ -254,7 +254,7 @@ bool IconController::appendToIconURLs(IconType iconType, IconURLs* iconURLs)
 IconURL IconController::defaultURL(IconType iconType)
 {
     // Don't return a favicon iconURL unless we're http or https
-    URL documentURL = m_frame->document()->url();
+    URL documentURL = m_frame.document()->url();
     if (!documentURL.protocolIsInHTTPFamily())
         return IconURL();
 
index ca9c14c..83844b9 100644 (file)
@@ -44,7 +44,7 @@ class IconController {
     WTF_MAKE_NONCOPYABLE(IconController);
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    explicit IconController(Frame*);
+    explicit IconController(Frame&);
     ~IconController();
 
     URL url();
@@ -63,9 +63,9 @@ private:
     bool appendToIconURLs(IconType, IconURLs*);
     IconURL defaultURL(IconType);
 
-    Frame* m_frame;
+    Frame& m_frame;
 
-    OwnPtr<IconLoader> m_iconLoader;
+    std::unique_ptr<IconLoader> m_iconLoader;
     bool m_waitingForLoadDecision;
 };
 
index 7883869..948696f 100644 (file)
 
 namespace WebCore {
 
-IconLoader::IconLoader(Frame* frame)
+IconLoader::IconLoader(Frame& frame)
     : m_frame(frame)
 {
 }
 
-PassOwnPtr<IconLoader> IconLoader::create(Frame* frame)
-{
-    return adoptPtr(new IconLoader(frame));
-}
-
 IconLoader::~IconLoader()
 {
     stopLoading();
@@ -60,10 +55,10 @@ IconLoader::~IconLoader()
 
 void IconLoader::startLoading()
 {
-    if (m_resource || !m_frame->document())
+    if (m_resource || !m_frame.document())
         return;
 
-    CachedResourceRequest request(ResourceRequest(m_frame->loader().icon().url()), ResourceLoaderOptions(SendCallbacks, SniffContent, BufferData, DoNotAllowStoredCredentials, DoNotAskClientForAnyCredentials, DoSecurityCheck, UseDefaultOriginRestrictionsForType));
+    CachedResourceRequest request(ResourceRequest(m_frame.loader().icon().url()), ResourceLoaderOptions(SendCallbacks, SniffContent, BufferData, DoNotAllowStoredCredentials, DoNotAskClientForAnyCredentials, DoSecurityCheck, UseDefaultOriginRestrictionsForType));
 
 #if PLATFORM(BLACKBERRY)
     request.mutableResourceRequest().setTargetType(ResourceRequest::TargetIsFavicon);
@@ -71,11 +66,11 @@ void IconLoader::startLoading()
     request.mutableResourceRequest().setPriority(ResourceLoadPriorityLow);
     request.setInitiator(cachedResourceRequestInitiators().icon);
 
-    m_resource = m_frame->document()->cachedResourceLoader()->requestRawResource(request);
+    m_resource = m_frame.document()->cachedResourceLoader()->requestRawResource(request);
     if (m_resource)
         m_resource->addClient(this);
     else
-        LOG_ERROR("Failed to start load for icon at url %s", m_frame->loader().icon().url().string().ascii().data());
+        LOG_ERROR("Failed to start load for icon at url %s", m_frame.loader().icon().url().string().ascii().data());
 }
 
 void IconLoader::stopLoading()
@@ -105,12 +100,12 @@ void IconLoader::notifyFinished(CachedResource* resource)
     }
 
     LOG(IconDatabase, "IconLoader::finishLoading() - Committing iconURL %s to database", resource->url().string().ascii().data());
-    m_frame->loader().icon().commitToDatabase(resource->url());
+    m_frame.loader().icon().commitToDatabase(resource->url());
     // Setting the icon data only after committing to the database ensures that the data is
     // kept in memory (so it does not have to be read from the database asynchronously), since
     // there is a page URL referencing it.
     iconDatabase().setIconDataForIconURL(data ? data->sharedBuffer() : 0, resource->url().string());
-    m_frame->loader().client().dispatchDidReceiveIcon();
+    m_frame.loader().client().dispatchDidReceiveIcon();
     stopLoading();
 }
 
index 95fd5a4..f4d9baf 100644 (file)
@@ -37,20 +37,19 @@ namespace WebCore {
 class CachedRawResource;
 class Frame;
 
-class IconLoader : private CachedRawResourceClient {
+class IconLoader FINAL : private CachedRawResourceClient {
     WTF_MAKE_NONCOPYABLE(IconLoader); WTF_MAKE_FAST_ALLOCATED;
 public:
-    static PassOwnPtr<IconLoader> create(Frame*);
+    explicit IconLoader(Frame&);
     virtual ~IconLoader();
 
     void startLoading();
     void stopLoading();
 
 private:
-    explicit IconLoader(Frame*);
-    virtual void notifyFinished(CachedResource*);
+    virtual void notifyFinished(CachedResource*) OVERRIDE;
 
-    Frame* m_frame;
+    Frame& m_frame;
     CachedResourceHandle<CachedRawResource> m_resource;
 };