[SCM] WebKit Debian packaging branch, debian/experimental, updated. debian/1.3.8-1-1049-g2e11a8e

commit-queue at webkit.org commit-queue at webkit.org
Fri Jan 21 15:06:11 UTC 2011


The following commit has been merged in the debian/experimental branch:
commit 32b882bc82adef4a5489faf9f0b22b1d4329bafb
Author: commit-queue at webkit.org <commit-queue at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Jan 7 01:58:47 2011 +0000

    2011-01-06  Jenn Braithwaite  <jennb at chromium.org>
    
            Reviewed by Dmitry Titov.
    
            When a live frame is moved between pages, some plug-in DOM methods cease to function
            https://bugs.webkit.org/show_bug.cgi?id=45770
    
            * fast/frames/iframe-reparenting-plugins-expected.txt: Added.
            * fast/frames/iframe-reparenting-plugins.html: Added.
            * fast/frames/resources/iframe-reparenting-plugins-iframe-content.html: Added.
            * fast/frames/resources/iframe-reparenting-plugins-new-page.html: Added.
    2011-01-06  Jenn Braithwaite  <jennb at chromium.org>
    
            Reviewed by Dmitry Titov.
    
            When a live frame is moved between pages, some plug-in DOM methods cease to function
            https://bugs.webkit.org/show_bug.cgi?id=45770
    
            Test: fast/frames/iframe-reparenting-plugins.html
    
            * page/Frame.cpp:
            (WebCore::Frame::~Frame):
            (WebCore::Frame::addObserver):
            (WebCore::Frame::removeObserver):
            * page/Frame.h:
            (WebCore::FrameDestructionObserver::~FrameDestructionObserver):
            Added observer to be notified when frame is destroyed.
            * page/Page.cpp:
            (WebCore::Page::~Page):
            (WebCore::Page::refreshPlugins):
            PluginData no longer stores page pointer.
            * plugins/DOMMimeType.cpp:
            (WebCore::DOMMimeType::DOMMimeType):
            (WebCore::DOMMimeType::~DOMMimeType):
            (WebCore::DOMMimeType::enabledPlugin):
            * plugins/DOMMimeType.h:
            (WebCore::DOMMimeType::create):
            (WebCore::DOMMimeType::frameDestroyed):
            Store frame instead of page pointer in DOMMimeType.
            * plugins/DOMMimeTypeArray.cpp:
            (WebCore::DOMMimeTypeArray::item):
            (WebCore::DOMMimeTypeArray::namedItem):
            Provide frame to create DOMMimeType.
            * plugins/DOMPlugin.cpp:
            (WebCore::DOMPlugin::DOMPlugin):
            (WebCore::DOMPlugin::~DOMPlugin):
            (WebCore::DOMPlugin::item):
            (WebCore::DOMPlugin::namedItem):
            * plugins/DOMPlugin.h:
            (WebCore::DOMPlugin::create):
            (WebCore::DOMPlugin::frameDestroyed):
            Store frame instead of page pointer in DOMPlugin.
            * plugins/DOMPluginArray.cpp:
            (WebCore::DOMPluginArray::item):
            (WebCore::DOMPluginArray::namedItem):
            Provide frame to create DOMPlugin.
            * plugins/PluginData.cpp:
            (WebCore::PluginData::PluginData):
            (WebCore::PluginData::initPlugins):
            * plugins/PluginData.h:
            No longer stores a pointer to the page.
            Added page parameter to initPlugins.
            * plugins/PluginDataNone.cpp:
            (WebCore::PluginData::initPlugins):
            * plugins/chromium/PluginDataChromium.cpp:
            (WebCore::PluginData::initPlugins):
            * plugins/gtk/PluginDataGtk.cpp:
            (WebCore::PluginData::initPlugins):
            * plugins/wx/PluginDataWx.cpp:
            (WebCore::PluginData::initPlugins):
            Updated platforms to add (unused) page parameter to initPlugins.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@75217 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index f0cb3ef..a0b321c 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,15 @@
+2011-01-06  Jenn Braithwaite  <jennb at chromium.org>
+
+        Reviewed by Dmitry Titov.
+
+        When a live frame is moved between pages, some plug-in DOM methods cease to function
+        https://bugs.webkit.org/show_bug.cgi?id=45770
+
+        * fast/frames/iframe-reparenting-plugins-expected.txt: Added.
+        * fast/frames/iframe-reparenting-plugins.html: Added.
+        * fast/frames/resources/iframe-reparenting-plugins-iframe-content.html: Added.
+        * fast/frames/resources/iframe-reparenting-plugins-new-page.html: Added.
+
 2011-01-06  Stephen White  <senorblanco at chromium.org>
 
         Unreviewed; test expectations update.
diff --git a/LayoutTests/fast/frames/iframe-reparenting-plugins-expected.txt b/LayoutTests/fast/frames/iframe-reparenting-plugins-expected.txt
new file mode 100644
index 0000000..956b659
--- /dev/null
+++ b/LayoutTests/fast/frames/iframe-reparenting-plugins-expected.txt
@@ -0,0 +1,12 @@
+This test verifies that plugin and mimetype in an iframe that is reparented to a different page continue to behave correctly.
+
+Loaded window 2.
+PASS: plugin OK.
+PASS: mimetype OK.
+
+Adopted iframe to first page.
+Window 2 unloaded.
+PASS: plugin OK.
+PASS: mimetype OK.
+
+
diff --git a/LayoutTests/fast/frames/iframe-reparenting-plugins.html b/LayoutTests/fast/frames/iframe-reparenting-plugins.html
new file mode 100644
index 0000000..cdba41b
--- /dev/null
+++ b/LayoutTests/fast/frames/iframe-reparenting-plugins.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<script>
+var window2, iframe;
+
+function log(message)
+{
+    document.getElementById("log").innerText += message + "\n";
+}
+
+function finish()
+{
+    var message = iframe.contentWindow.checkPlugins();
+    log(message);
+
+    if (window.layoutTestController)
+        layoutTestController.notifyDone();
+}
+
+function window2Unloaded()
+{
+    log("Window 2 unloaded.");
+    setTimeout(finish, 0); // Let window close finish completely.
+}
+
+function window2Loaded()
+{
+    log("Loaded window 2.");
+    iframe = window2.document.getElementById("iframe");
+
+    var message = iframe.contentWindow.checkPlugins();
+    log(message);
+
+    window.document.adoptNode(iframe);
+    window.document.body.appendChild(iframe);
+    log("Adopted iframe to first page.");
+
+    window2.onunload = window2Unloaded;
+    window2.close();
+}
+
+function test()
+{
+    if (window.layoutTestController) {
+        layoutTestController.dumpAsText();
+        layoutTestController.waitUntilDone();
+        layoutTestController.setCanOpenWindows();
+    }
+
+    window2 = window.open("resources/iframe-reparenting-plugins-new-page.html");
+    window2.addEventListener("load", window2Loaded, false);
+}
+
+</script>
+<body onload="test()">
+<p>This test verifies that plugin and mimetype in an iframe that is
+reparented to a different page continue to behave correctly.
+<pre id=log></pre>
+</body>
+</html>
diff --git a/LayoutTests/fast/frames/resources/iframe-reparenting-plugins-iframe-content.html b/LayoutTests/fast/frames/resources/iframe-reparenting-plugins-iframe-content.html
new file mode 100644
index 0000000..3247e7b
--- /dev/null
+++ b/LayoutTests/fast/frames/resources/iframe-reparenting-plugins-iframe-content.html
@@ -0,0 +1,27 @@
+<script>
+// We can only guarantee that the Test PlugIn is installed.
+var plugin = navigator.plugins.namedItem("WebKit Test PlugIn");
+var mimetype = navigator.mimeTypes[0];
+
+// Called by test page after adopting this iframe and closing the
+// page that originally held this iframe.
+checkPlugins = function()
+{
+  if (!plugin) {
+      return "FAIL: Failed to find test plugin\n";
+  }
+
+  var message = "";
+  if (plugin.item(0).enabledPlugin)
+      message += "PASS: plugin OK.\n";
+  else
+      message += "FAIL: plugin references PluginData with no page.\n";
+
+  if (mimetype.enabledPlugin)
+      message += "PASS: mimetype OK.\n";
+  else
+      message += "FAIL: mimetype references PluginData with no page.\n";
+
+  return message;
+}
+</script>
diff --git a/LayoutTests/fast/frames/resources/iframe-reparenting-plugins-new-page.html b/LayoutTests/fast/frames/resources/iframe-reparenting-plugins-new-page.html
new file mode 100644
index 0000000..55a3090
--- /dev/null
+++ b/LayoutTests/fast/frames/resources/iframe-reparenting-plugins-new-page.html
@@ -0,0 +1,6 @@
+<html>
+<body>
+A New Page<br>
+<iframe id="iframe" src="iframe-reparenting-plugins-iframe-content.html"</iframe>
+</body>
+</html>
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 74c2491..d6dd6eb 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,64 @@
+2011-01-06  Jenn Braithwaite  <jennb at chromium.org>
+
+        Reviewed by Dmitry Titov.
+
+        When a live frame is moved between pages, some plug-in DOM methods cease to function
+        https://bugs.webkit.org/show_bug.cgi?id=45770
+
+        Test: fast/frames/iframe-reparenting-plugins.html
+
+        * page/Frame.cpp:
+        (WebCore::Frame::~Frame):
+        (WebCore::Frame::addObserver):
+        (WebCore::Frame::removeObserver):
+        * page/Frame.h:
+        (WebCore::FrameDestructionObserver::~FrameDestructionObserver):
+        Added observer to be notified when frame is destroyed.
+        * page/Page.cpp:
+        (WebCore::Page::~Page):
+        (WebCore::Page::refreshPlugins):
+        PluginData no longer stores page pointer.
+        * plugins/DOMMimeType.cpp:
+        (WebCore::DOMMimeType::DOMMimeType):
+        (WebCore::DOMMimeType::~DOMMimeType):
+        (WebCore::DOMMimeType::enabledPlugin):
+        * plugins/DOMMimeType.h:
+        (WebCore::DOMMimeType::create):
+        (WebCore::DOMMimeType::frameDestroyed):
+        Store frame instead of page pointer in DOMMimeType.
+        * plugins/DOMMimeTypeArray.cpp:
+        (WebCore::DOMMimeTypeArray::item):
+        (WebCore::DOMMimeTypeArray::namedItem):
+        Provide frame to create DOMMimeType.
+        * plugins/DOMPlugin.cpp:
+        (WebCore::DOMPlugin::DOMPlugin):
+        (WebCore::DOMPlugin::~DOMPlugin):
+        (WebCore::DOMPlugin::item):
+        (WebCore::DOMPlugin::namedItem):
+        * plugins/DOMPlugin.h:
+        (WebCore::DOMPlugin::create):
+        (WebCore::DOMPlugin::frameDestroyed):
+        Store frame instead of page pointer in DOMPlugin.
+        * plugins/DOMPluginArray.cpp:
+        (WebCore::DOMPluginArray::item):
+        (WebCore::DOMPluginArray::namedItem):
+        Provide frame to create DOMPlugin.
+        * plugins/PluginData.cpp:
+        (WebCore::PluginData::PluginData):
+        (WebCore::PluginData::initPlugins):
+        * plugins/PluginData.h:
+        No longer stores a pointer to the page.
+        Added page parameter to initPlugins.
+        * plugins/PluginDataNone.cpp:
+        (WebCore::PluginData::initPlugins):
+        * plugins/chromium/PluginDataChromium.cpp:
+        (WebCore::PluginData::initPlugins):
+        * plugins/gtk/PluginDataGtk.cpp:
+        (WebCore::PluginData::initPlugins):
+        * plugins/wx/PluginDataWx.cpp:
+        (WebCore::PluginData::initPlugins):
+        Updated platforms to add (unused) page parameter to initPlugins.
+
 2011-01-05  Zhenyao Mo  <zmo at google.com>
 
         Reviewed by Kenneth Russell.
diff --git a/WebCore/page/Frame.cpp b/WebCore/page/Frame.cpp
index 5c5ad37..3997331 100644
--- a/WebCore/page/Frame.cpp
+++ b/WebCore/page/Frame.cpp
@@ -234,6 +234,10 @@ Frame::~Frame()
     for (HashSet<DOMWindow*>::iterator it = m_liveFormerWindows.begin(); it != end; ++it)
         (*it)->disconnectFrame();
 
+    HashSet<FrameDestructionObserver*>::iterator stop = m_destructionObservers.end();
+    for (HashSet<FrameDestructionObserver*>::iterator it = m_destructionObservers.begin(); it != stop; ++it)
+        (*it)->frameDestroyed();
+
     if (m_view) {
         m_view->hide();
         m_view->clearFrame();
@@ -242,6 +246,16 @@ Frame::~Frame()
     ASSERT(!m_lifeSupportTimer.isActive());
 }
 
+void Frame::addDestructionObserver(FrameDestructionObserver* observer)
+{
+    m_destructionObservers.add(observer);
+}
+
+void Frame::removeDestructionObserver(FrameDestructionObserver* observer)
+{
+    m_destructionObservers.remove(observer);
+}
+
 void Frame::setView(PassRefPtr<FrameView> view)
 {
     // We the custom scroll bars as early as possible to prevent m_doc->detach()
diff --git a/WebCore/page/Frame.h b/WebCore/page/Frame.h
index 892a5ea..da77966 100644
--- a/WebCore/page/Frame.h
+++ b/WebCore/page/Frame.h
@@ -71,6 +71,13 @@ namespace WebCore {
     class TiledBackingStoreClient { };
 #endif
 
+    class FrameDestructionObserver {
+    public:
+        virtual ~FrameDestructionObserver() { }
+
+        virtual void frameDestroyed() = 0;
+    };
+
     class Frame : public RefCounted<Frame>, public TiledBackingStoreClient {
     public:
         static PassRefPtr<Frame> create(Page*, HTMLFrameOwnerElement*, FrameLoaderClient*);
@@ -83,6 +90,9 @@ namespace WebCore {
 
         ~Frame();
 
+        void addDestructionObserver(FrameDestructionObserver*);
+        void removeDestructionObserver(FrameDestructionObserver*);
+
         void detachFromPage();
         void pageDestroyed();
         void disconnectOwnerElement();
@@ -199,6 +209,8 @@ namespace WebCore {
         void injectUserScriptsForWorld(DOMWrapperWorld*, const UserScriptVector&, UserScriptInjectionTime);
         void lifeSupportTimerFired(Timer<Frame>*);
 
+        HashSet<FrameDestructionObserver*> m_destructionObservers;
+
         Page* m_page;
         mutable FrameTree m_treeNode;
         mutable FrameLoader m_loader;
diff --git a/WebCore/page/Page.cpp b/WebCore/page/Page.cpp
index b2c0241..808c561 100644
--- a/WebCore/page/Page.cpp
+++ b/WebCore/page/Page.cpp
@@ -211,8 +211,6 @@ Page::~Page()
         frame->pageDestroyed();
 
     m_editorClient->pageDestroyed();
-    if (m_pluginData)
-        m_pluginData->disconnectPage();
     
 #if ENABLE(INSPECTOR)
     m_inspectorController->inspectedPageDestroyed();
@@ -450,10 +448,8 @@ void Page::refreshPlugins(bool reload)
         Page* page = *it;
         
         // Clear out the page's plug-in data.
-        if (page->m_pluginData) {
-            page->m_pluginData->disconnectPage();
+        if (page->m_pluginData)
             page->m_pluginData = 0;
-        }
 
         if (!reload)
             continue;
diff --git a/WebCore/plugins/DOMMimeType.cpp b/WebCore/plugins/DOMMimeType.cpp
index e799314..114d218 100644
--- a/WebCore/plugins/DOMMimeType.cpp
+++ b/WebCore/plugins/DOMMimeType.cpp
@@ -29,14 +29,19 @@
 
 namespace WebCore {
 
-DOMMimeType::DOMMimeType(PassRefPtr<PluginData> pluginData, unsigned index)
+DOMMimeType::DOMMimeType(PassRefPtr<PluginData> pluginData, Frame* frame, unsigned index)
     : m_pluginData(pluginData)
+    , m_frame(frame)
     , m_index(index)
 {
+    if (m_frame)
+        m_frame->addDestructionObserver(this);
 }
 
 DOMMimeType::~DOMMimeType()
 {
+    if (m_frame)
+        m_frame->removeDestructionObserver(this);
 }
 
 const String &DOMMimeType::type() const
@@ -64,11 +69,10 @@ const String &DOMMimeType::description() const
 
 PassRefPtr<DOMPlugin> DOMMimeType::enabledPlugin() const
 {
-    const Page* p = m_pluginData->page();
-    if (!p || !p->mainFrame()->loader()->subframeLoader()->allowPlugins(NotAboutToInstantiatePlugin))
+    if (!m_frame || !m_frame->page() || !m_frame->page()->mainFrame()->loader()->subframeLoader()->allowPlugins(NotAboutToInstantiatePlugin))
         return 0;
 
-    return DOMPlugin::create(m_pluginData.get(), m_pluginData->mimePluginIndices()[m_index]);
+    return DOMPlugin::create(m_pluginData.get(), m_frame, m_pluginData->mimePluginIndices()[m_index]);
 }
 
 } // namespace WebCore
diff --git a/WebCore/plugins/DOMMimeType.h b/WebCore/plugins/DOMMimeType.h
index cefdb48..74c62d0 100644
--- a/WebCore/plugins/DOMMimeType.h
+++ b/WebCore/plugins/DOMMimeType.h
@@ -20,20 +20,21 @@
 #ifndef DOMMimeType_h
 #define DOMMimeType_h
 
+#include "Frame.h"
+#include "PluginData.h"
+
 #include <wtf/Forward.h>
 #include <wtf/PassRefPtr.h>
-#include <wtf/RefPtr.h>
 #include <wtf/RefCounted.h>
-
-#include "PluginData.h"
+#include <wtf/RefPtr.h>
 
 namespace WebCore {
 
 class DOMPlugin;
 
-class DOMMimeType : public RefCounted<DOMMimeType> {
+class DOMMimeType : public RefCounted<DOMMimeType>, private FrameDestructionObserver {
 public:
-    static PassRefPtr<DOMMimeType> create(PassRefPtr<PluginData> pluginData, unsigned index) { return adoptRef(new DOMMimeType(pluginData, index)); }
+    static PassRefPtr<DOMMimeType> create(PassRefPtr<PluginData> pluginData, Frame* frame, unsigned index) { return adoptRef(new DOMMimeType(pluginData, frame, index)); }
     ~DOMMimeType();
 
     const String &type() const;
@@ -41,11 +42,15 @@ public:
     const String &description() const;
     PassRefPtr<DOMPlugin> enabledPlugin() const;
 
+    // FrameDestructionObserver
+    virtual void frameDestroyed() { m_frame = 0; }
+
 private:
     const MimeClassInfo& mimeClassInfo() const { return m_pluginData->mimes()[m_index]; }
     
-    DOMMimeType(PassRefPtr<PluginData>, unsigned index);
+    DOMMimeType(PassRefPtr<PluginData>, Frame*, unsigned index);
     RefPtr<PluginData> m_pluginData;
+    Frame* m_frame;
     unsigned m_index;
 };
 
diff --git a/WebCore/plugins/DOMMimeTypeArray.cpp b/WebCore/plugins/DOMMimeTypeArray.cpp
index 8c81bb7..82d4006 100644
--- a/WebCore/plugins/DOMMimeTypeArray.cpp
+++ b/WebCore/plugins/DOMMimeTypeArray.cpp
@@ -53,7 +53,7 @@ PassRefPtr<DOMMimeType> DOMMimeTypeArray::item(unsigned index)
     const Vector<MimeClassInfo>& mimes = data->mimes();
     if (index >= mimes.size())
         return 0;
-    return DOMMimeType::create(data, index).get();
+    return DOMMimeType::create(data, m_frame, index).get();
 }
 
 bool DOMMimeTypeArray::canGetItemsForName(const AtomicString& propertyName)
@@ -77,7 +77,7 @@ PassRefPtr<DOMMimeType> DOMMimeTypeArray::namedItem(const AtomicString& property
     const Vector<MimeClassInfo>& mimes = data->mimes();
     for (unsigned i = 0; i < mimes.size(); ++i) {
         if (mimes[i].type == propertyName)
-            return DOMMimeType::create(data, i).get();
+            return DOMMimeType::create(data, m_frame, i).get();
     }
     return 0;
 }
diff --git a/WebCore/plugins/DOMPlugin.cpp b/WebCore/plugins/DOMPlugin.cpp
index ac4fd03..8ddb507 100644
--- a/WebCore/plugins/DOMPlugin.cpp
+++ b/WebCore/plugins/DOMPlugin.cpp
@@ -25,14 +25,19 @@
 
 namespace WebCore {
 
-DOMPlugin::DOMPlugin(PluginData* pluginData, unsigned index)
+DOMPlugin::DOMPlugin(PluginData* pluginData, Frame* frame, unsigned index)
     : m_pluginData(pluginData)
+    , m_frame(frame)
     , m_index(index)
 {
+    if (m_frame)
+        m_frame->addDestructionObserver(this);
 }
 
 DOMPlugin::~DOMPlugin()
 {
+    if (m_frame)
+        m_frame->removeDestructionObserver(this);
 }
 
 String DOMPlugin::name() const
@@ -65,7 +70,7 @@ PassRefPtr<DOMMimeType> DOMPlugin::item(unsigned index)
     const Vector<MimeClassInfo>& mimes = m_pluginData->mimes();
     for (unsigned i = 0; i < mimes.size(); ++i) {
         if (mimes[i] == mime && m_pluginData->mimePluginIndices()[i] == m_index)
-            return DOMMimeType::create(m_pluginData.get(), i).get();
+            return DOMMimeType::create(m_pluginData.get(), m_frame, i).get();
     }
     return 0;
 }
@@ -84,7 +89,7 @@ PassRefPtr<DOMMimeType> DOMPlugin::namedItem(const AtomicString& propertyName)
     const Vector<MimeClassInfo>& mimes = m_pluginData->mimes();
     for (unsigned i = 0; i < mimes.size(); ++i)
         if (mimes[i].type == propertyName)
-            return DOMMimeType::create(m_pluginData.get(), i).get();
+            return DOMMimeType::create(m_pluginData.get(), m_frame, i).get();
     return 0;
 }
 
diff --git a/WebCore/plugins/DOMPlugin.h b/WebCore/plugins/DOMPlugin.h
index 9700ab5..f305ec2 100644
--- a/WebCore/plugins/DOMPlugin.h
+++ b/WebCore/plugins/DOMPlugin.h
@@ -30,9 +30,9 @@ namespace WebCore {
 class Plugin;
 class PluginData;
 
-class DOMPlugin : public RefCounted<DOMPlugin> {
+class DOMPlugin : public RefCounted<DOMPlugin>, private FrameDestructionObserver {
 public:
-    static PassRefPtr<DOMPlugin> create(PluginData* pluginData, unsigned index) { return adoptRef(new DOMPlugin(pluginData, index)); }
+    static PassRefPtr<DOMPlugin> create(PluginData* pluginData, Frame* frame, unsigned index) { return adoptRef(new DOMPlugin(pluginData, frame, index)); }
     ~DOMPlugin();
 
     String name() const;
@@ -45,11 +45,15 @@ public:
     bool canGetItemsForName(const AtomicString& propertyName);
     PassRefPtr<DOMMimeType> namedItem(const AtomicString& propertyName);
 
+    // FrameDestructionObserver
+    virtual void frameDestroyed() { m_frame = 0; }
+
 private:
     const PluginInfo& pluginInfo() const { return m_pluginData->plugins()[m_index]; }
 
-    DOMPlugin(PluginData*, unsigned index);
+    DOMPlugin(PluginData*, Frame*, unsigned index);
     RefPtr<PluginData> m_pluginData;
+    Frame* m_frame;
     unsigned m_index;
 };
 
diff --git a/WebCore/plugins/DOMPluginArray.cpp b/WebCore/plugins/DOMPluginArray.cpp
index 3717f32..766c3eb 100644
--- a/WebCore/plugins/DOMPluginArray.cpp
+++ b/WebCore/plugins/DOMPluginArray.cpp
@@ -53,7 +53,7 @@ PassRefPtr<DOMPlugin> DOMPluginArray::item(unsigned index)
     const Vector<PluginInfo>& plugins = data->plugins();
     if (index >= plugins.size())
         return 0;
-    return DOMPlugin::create(data, index).get();
+    return DOMPlugin::create(data, m_frame, index).get();
 }
 
 bool DOMPluginArray::canGetItemsForName(const AtomicString& propertyName)
@@ -77,7 +77,7 @@ PassRefPtr<DOMPlugin> DOMPluginArray::namedItem(const AtomicString& propertyName
     const Vector<PluginInfo>& plugins = data->plugins();
     for (unsigned i = 0; i < plugins.size(); ++i) {
         if (plugins[i].name == propertyName)
-            return DOMPlugin::create(data, i).get();
+            return DOMPlugin::create(data, m_frame, i).get();
     }
     return 0;
 }
diff --git a/WebCore/plugins/PluginData.cpp b/WebCore/plugins/PluginData.cpp
index d24d234..b8e751d 100644
--- a/WebCore/plugins/PluginData.cpp
+++ b/WebCore/plugins/PluginData.cpp
@@ -32,9 +32,8 @@
 namespace WebCore {
 
 PluginData::PluginData(const Page* page)
-    : m_page(page)
 {
-    initPlugins();
+    initPlugins(page);
 
     for (unsigned i = 0; i < m_plugins.size(); ++i) {
         const PluginInfo& plugin = m_plugins[i];
@@ -71,11 +70,11 @@ void PluginData::refresh()
     platformStrategies()->pluginStrategy()->refreshPlugins();
 }
 
-void PluginData::initPlugins()
+void PluginData::initPlugins(const Page* page)
 {
     ASSERT(m_plugins.isEmpty());
     
-    platformStrategies()->pluginStrategy()->getPluginInfo(m_page, m_plugins);
+    platformStrategies()->pluginStrategy()->getPluginInfo(page, m_plugins);
 }
 #endif
 
diff --git a/WebCore/plugins/PluginData.h b/WebCore/plugins/PluginData.h
index f4cc62f..c6cde81 100644
--- a/WebCore/plugins/PluginData.h
+++ b/WebCore/plugins/PluginData.h
@@ -51,9 +51,6 @@ struct PluginInfo {
 class PluginData : public RefCounted<PluginData> {
 public:
     static PassRefPtr<PluginData> create(const Page* page) { return adoptRef(new PluginData(page)); }
- 
-    void disconnectPage() { m_page = 0; }
-    const Page* page() const { return m_page; }
 
     const Vector<PluginInfo>& plugins() const { return m_plugins; }
     const Vector<MimeClassInfo>& mimes() const { return m_mimes; }
@@ -66,13 +63,11 @@ public:
 
 private:
     PluginData(const Page*);
-    void initPlugins();
+    void initPlugins(const Page*);
 
     Vector<PluginInfo> m_plugins;
     Vector<MimeClassInfo> m_mimes;
     Vector<size_t> m_mimePluginIndices;
-    
-    const Page* m_page;
 };
 
 }
diff --git a/WebCore/plugins/PluginDataNone.cpp b/WebCore/plugins/PluginDataNone.cpp
index 3b98383..edfee5b 100644
--- a/WebCore/plugins/PluginDataNone.cpp
+++ b/WebCore/plugins/PluginDataNone.cpp
@@ -29,7 +29,7 @@
 
 namespace WebCore {
 
-void PluginData::initPlugins()
+void PluginData::initPlugins(const Page*)
 {
 }
 
diff --git a/WebCore/plugins/chromium/PluginDataChromium.cpp b/WebCore/plugins/chromium/PluginDataChromium.cpp
index 378fccb..c924063 100644
--- a/WebCore/plugins/chromium/PluginDataChromium.cpp
+++ b/WebCore/plugins/chromium/PluginDataChromium.cpp
@@ -65,7 +65,7 @@ private:
 
 static PluginCache pluginCache;
 
-void PluginData::initPlugins()
+void PluginData::initPlugins(const Page*)
 {
     const Vector<PluginInfo>& plugins = pluginCache.plugins();
     for (size_t i = 0; i < plugins.size(); ++i)
diff --git a/WebCore/plugins/gtk/PluginDataGtk.cpp b/WebCore/plugins/gtk/PluginDataGtk.cpp
index ae4d98b..705bf9a 100644
--- a/WebCore/plugins/gtk/PluginDataGtk.cpp
+++ b/WebCore/plugins/gtk/PluginDataGtk.cpp
@@ -27,7 +27,7 @@
 #include <stdio.h>
 namespace WebCore {
 
-void PluginData::initPlugins()
+void PluginData::initPlugins(const Page*)
 {
     PluginDatabase *db = PluginDatabase::installedPlugins();
     const Vector<PluginPackage*> &plugins = db->plugins();
diff --git a/WebCore/plugins/wx/PluginDataWx.cpp b/WebCore/plugins/wx/PluginDataWx.cpp
index a595c82..0eb890f 100644
--- a/WebCore/plugins/wx/PluginDataWx.cpp
+++ b/WebCore/plugins/wx/PluginDataWx.cpp
@@ -33,7 +33,7 @@
 
 namespace WebCore {
 
-void PluginData::initPlugins()
+void PluginData::initPlugins(const Page*)
 {
     PluginDatabase* db = PluginDatabase::installedPlugins();
     const Vector<PluginPackage*> &plugins = db->plugins();

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list