Page::pluginData() should return a reference.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 28 Aug 2013 14:11:49 +0000 (14:11 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 28 Aug 2013 14:11:49 +0000 (14:11 +0000)
<https://webkit.org/b/120386>

Reviewed by Darin Adler.

The PluginData is lazily constructed by pluginData(); it never returns null.
A small number of null checks were harmed in the making of this patch.

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

12 files changed:
Source/WebCore/ChangeLog
Source/WebCore/dom/DOMImplementation.cpp
Source/WebCore/loader/SubframeLoader.cpp
Source/WebCore/page/Page.cpp
Source/WebCore/page/Page.h
Source/WebCore/plugins/DOMMimeTypeArray.cpp
Source/WebCore/plugins/DOMPluginArray.cpp
Source/WebKit/mac/WebView/WebFrame.mm
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
Source/WebKit/win/WebView.cpp
Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
Source/WebKit2/WebProcess/WebPage/WebPage.cpp

index 1e105c0..022796f 100644 (file)
@@ -1,3 +1,13 @@
+2013-08-28  Andreas Kling  <akling@apple.com>
+
+        Page::pluginData() should return a reference.
+        <https://webkit.org/b/120386>
+
+        Reviewed by Darin Adler.
+
+        The PluginData is lazily constructed by pluginData(); it never returns null.
+        A small number of null checks were harmed in the making of this patch.
+
 2013-08-28  Andrei Parvu  <parvu@adobe.com>
 
         <https://webkit.org/b/120002> [CSS Masking] Add -webkit-mask-source-type shorthand property
index c119e98..e81ca8d 100644 (file)
@@ -354,7 +354,7 @@ PassRefPtr<Document> DOMImplementation::createDocument(const String& type, Frame
         if (frame->loader().subframeLoader()->allowPlugins(NotAboutToInstantiatePlugin))
             allowedPluginTypes = PluginData::AllPlugins;
 
-        pluginData = frame->page()->pluginData();
+        pluginData = &frame->page()->pluginData();
     }
 
     // PDF is one image type for which a plugin can override built-in support.
index 2a0683c..2c234a4 100644 (file)
@@ -167,12 +167,10 @@ static String findPluginMIMETypeFromURL(Page* page, const String& url)
 
     String extension = url.substring(dotIndex + 1);
 
-    PluginData* pluginData = page->pluginData();
-    if (!pluginData)
-        return String();
+    const PluginData& pluginData = page->pluginData();
 
-    for (size_t i = 0; i < pluginData->mimes().size(); ++i) {
-        const MimeClassInfo& mimeClassInfo = pluginData->mimes()[i];
+    for (size_t i = 0; i < pluginData.mimes().size(); ++i) {
+        const MimeClassInfo& mimeClassInfo = pluginData.mimes()[i];
         for (size_t j = 0; j < mimeClassInfo.extensions.size(); ++j) {
             if (equalIgnoringCase(extension, mimeClassInfo.extensions[j]))
                 return mimeClassInfo.type;
@@ -195,8 +193,7 @@ static void logPluginRequest(Page* page, const String& mimeType, const String& u
             return;
     }
 
-    PluginData* pluginData = page->pluginData();
-    String pluginFile = pluginData ? pluginData->pluginFileForMimeType(newMIMEType) : String();
+    String pluginFile = page->pluginData().pluginFileForMimeType(newMIMEType);
     String description = !pluginFile ? newMIMEType : pluginFile;
 
     ChromeClient& chromeClient = page->chrome().client();
@@ -416,8 +413,7 @@ bool SubframeLoader::shouldUsePlugin(const KURL& url, const String& mimeType, bo
     // Allow other plug-ins to win over QuickTime because if the user has installed a plug-in that
     // can handle TIFF (which QuickTime can also handle) they probably intended to override QT.
     if (m_frame->page() && (mimeType == "image/tiff" || mimeType == "image/tif" || mimeType == "image/x-tiff")) {
-        const PluginData* pluginData = m_frame->page()->pluginData();
-        String pluginName = pluginData ? pluginData->pluginNameForMimeType(mimeType) : String();
+        String pluginName = m_frame->page()->pluginData().pluginNameForMimeType(mimeType);
         if (!pluginName.isEmpty() && !pluginName.contains("QuickTime", false)) 
             return true;
     }
index 3a3f8aa..456fbc9 100644 (file)
@@ -516,11 +516,11 @@ void Page::refreshPlugins(bool reload)
         framesNeedingReload[i]->loader().reload();
 }
 
-PluginData* Page::pluginData() const
+PluginData& Page::pluginData() const
 {
     if (!m_pluginData)
         m_pluginData = PluginData::create(this);
-    return m_pluginData.get();
+    return *m_pluginData;
 }
 
 inline MediaCanStartListener* Page::takeAnyMediaCanStartListener()
index 69baf60..657a29f 100644 (file)
@@ -152,7 +152,7 @@ public:
     ViewportArguments viewportArguments() const;
 
     static void refreshPlugins(bool reload);
-    PluginData* pluginData() const;
+    PluginData& pluginData() const;
 
     void setCanStartMedia(bool);
     bool canStartMedia() const { return m_canStartMedia; }
index d39e9f1..d643825 100644 (file)
@@ -86,10 +86,10 @@ PluginData* DOMMimeTypeArray::getPluginData() const
 {
     if (!m_frame)
         return 0;
-    Page* p = m_frame->page();
-    if (!p)
+    Page* page = m_frame->page();
+    if (!page)
         return 0;
-    return p->pluginData();
+    return &page->pluginData();
 }
 
 } // namespace WebCore
index c8a53a5..cca94b2 100644 (file)
@@ -94,7 +94,7 @@ PluginData* DOMPluginArray::pluginData() const
     Page* page = m_frame->page();
     if (!page)
         return 0;
-    return page->pluginData();
+    return &page->pluginData();
 }
 
 } // namespace WebCore
index 5277201..fc36465 100644 (file)
@@ -803,7 +803,7 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
 {
     Frame* frame = _private->coreFrame;
     String mimeType = frame->document()->loader()->writer()->mimeType();
-    PluginData* pluginData = frame->page() ? frame->page()->pluginData() : 0;
+    PluginData* pluginData = frame->page() ? &frame->page()->pluginData() : 0;
 
     if (WebCore::DOMImplementation::isTextMIMEType(mimeType)
         || Image::supportsType(mimeType)
index 4d33d4d..b4b2a8c 100644 (file)
@@ -1358,10 +1358,10 @@ ObjectContentType FrameLoaderClientQt::objectContentType(const KURL& url, const
     ObjectContentType plugInType = ObjectContentNone;
     if (arePluginsEnabled && PluginDatabase::installedPlugins()->isMIMETypeRegistered(mimeType))
         plugInType = ObjectContentNetscapePlugin;
-    else if (m_frame->page() && m_frame->page()->pluginData()) {
+    else if (m_frame->page()) {
         bool allowPlugins = m_frame->loader().subframeLoader()->allowPlugins(NotAboutToInstantiatePlugin);
-        if ((m_frame->page()->pluginData()->supportsMimeType(mimeType, PluginData::AllPlugins) && allowPlugins)
-            || m_frame->page()->pluginData()->supportsMimeType(mimeType, PluginData::OnlyApplicationPlugins))
+        if ((m_frame->page()->pluginData().supportsMimeType(mimeType, PluginData::AllPlugins) && allowPlugins)
+            || m_frame->page()->pluginData().supportsMimeType(mimeType, PluginData::OnlyApplicationPlugins))
                 plugInType = ObjectContentOtherPlugin;
     }
 
index 5ddec69..192c6b4 100644 (file)
@@ -2545,9 +2545,9 @@ HRESULT STDMETHODCALLTYPE WebView::canShowMIMEType(
     *canShow = MIMETypeRegistry::isSupportedImageMIMEType(mimeTypeStr)
         || MIMETypeRegistry::isSupportedNonImageMIMEType(mimeTypeStr);
 
-    if (!*canShow && m_page && m_page->pluginData()) {
-        *canShow = (m_page->pluginData()->supportsMimeType(mimeTypeStr, PluginData::AllPlugins) && allowPlugins)
-            || m_page->pluginData()->supportsMimeType(mimeTypeStr, PluginData::OnlyApplicationPlugins);
+    if (!*canShow && m_page) {
+        *canShow = (m_page->pluginData().supportsMimeType(mimeTypeStr, PluginData::AllPlugins) && allowPlugins)
+            || m_page->pluginData().supportsMimeType(mimeTypeStr, PluginData::OnlyApplicationPlugins);
     }
 
     if (!*canShow)
index 32bdbdb..67e23e3 100644 (file)
@@ -1376,12 +1376,12 @@ void WebFrameLoaderClient::showMediaPlayerProxyPlugin(Widget*)
 }
 #endif
 
-static bool pluginSupportsExtension(PluginData* pluginData, const String& extension)
+static bool pluginSupportsExtension(const PluginData& pluginData, const String& extension)
 {
     ASSERT(extension.lower() == extension);
 
-    for (size_t i = 0; i < pluginData->mimes().size(); ++i) {
-        const MimeClassInfo& mimeClassInfo = pluginData->mimes()[i];
+    for (size_t i = 0; i < pluginData.mimes().size(); ++i) {
+        const MimeClassInfo& mimeClassInfo = pluginData.mimes()[i];
 
         if (mimeClassInfo.extensions.contains(extension))
             return true;
@@ -1404,10 +1404,8 @@ ObjectContentType WebFrameLoaderClient::objectContentType(const KURL& url, const
         if (mimeType.isEmpty()) {
             // Check if there's a plug-in around that can handle the extension.
             if (WebPage* webPage = m_frame->page()) {
-                if (PluginData* pluginData = webPage->corePage()->pluginData()) {
-                    if (pluginSupportsExtension(pluginData, extension))
-                        return ObjectContentNetscapePlugin;
-                }
+                if (pluginSupportsExtension(webPage->corePage()->pluginData(), extension))
+                    return ObjectContentNetscapePlugin;
             }
         }
     }
@@ -1417,12 +1415,11 @@ ObjectContentType WebFrameLoaderClient::objectContentType(const KURL& url, const
 
     bool plugInSupportsMIMEType = false;
     if (WebPage* webPage = m_frame->page()) {
-        if (PluginData* pluginData = webPage->corePage()->pluginData()) {
-            if (pluginData->supportsMimeType(mimeType, PluginData::AllPlugins) && webFrame()->coreFrame()->loader().subframeLoader()->allowPlugins(NotAboutToInstantiatePlugin))
-                plugInSupportsMIMEType = true;
-            else if (pluginData->supportsMimeType(mimeType, PluginData::OnlyApplicationPlugins))
-                plugInSupportsMIMEType = true;
-        }
+        const PluginData& pluginData = webPage->corePage()->pluginData();
+        if (pluginData.supportsMimeType(mimeType, PluginData::AllPlugins) && webFrame()->coreFrame()->loader().subframeLoader()->allowPlugins(NotAboutToInstantiatePlugin))
+            plugInSupportsMIMEType = true;
+        else if (pluginData.supportsMimeType(mimeType, PluginData::OnlyApplicationPlugins))
+            plugInSupportsMIMEType = true;
     }
     
     if (MIMETypeRegistry::isSupportedImageMIMEType(mimeType))
index de0da67..add969a 100644 (file)
@@ -3939,14 +3939,13 @@ bool WebPage::canShowMIMEType(const String& MIMEType) const
     if (MIMETypeRegistry::canShowMIMEType(MIMEType))
         return true;
 
-    if (PluginData* pluginData = m_page->pluginData()) {
-        if (pluginData->supportsMimeType(MIMEType, PluginData::AllPlugins) && corePage()->mainFrame().loader().subframeLoader()->allowPlugins(NotAboutToInstantiatePlugin))
-            return true;
+    const PluginData& pluginData = m_page->pluginData();
+    if (pluginData.supportsMimeType(MIMEType, PluginData::AllPlugins) && corePage()->mainFrame().loader().subframeLoader()->allowPlugins(NotAboutToInstantiatePlugin))
+        return true;
 
-        // We can use application plugins even if plugins aren't enabled.
-        if (pluginData->supportsMimeType(MIMEType, PluginData::OnlyApplicationPlugins))
-            return true;
-    }
+    // We can use application plugins even if plugins aren't enabled.
+    if (pluginData.supportsMimeType(MIMEType, PluginData::OnlyApplicationPlugins))
+        return true;
 
     return false;
 }