- Revision
- 211052
- Author
- ander...@apple.com
- Date
- 2017-01-23 12:58:35 -0800 (Mon, 23 Jan 2017)
Log Message
When Safari reloads pages with Flash objects after Flash is installed, placeholders don't paint (but do work!)
https://bugs.webkit.org/show_bug.cgi?id=167268
rdar://problem/29857388
Reviewed by Sam Weinig.
Source/WebCore:
* page/Page.cpp:
(WebCore::Page::refreshPlugins):
Call PluginInfoProvider::refresh instead.
(WebCore::Page::clearPluginData):
Add new setter.
* page/Page.h:
Declare new members.
* plugins/PluginInfoProvider.cpp:
(WebCore::PluginInfoProvider::refresh):
Put the logic to clear plug-in data and reload frames here.
* plugins/PluginInfoProvider.h:
Add new members.
Source/WebKit2:
* WebProcess/Plugins/WebPluginInfoProvider.h:
Make refreshPlugins() private.
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::refreshPlugins):
Call the newly added PluginInfoProvider::refresh().
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (211051 => 211052)
--- trunk/Source/WebCore/ChangeLog 2017-01-23 20:55:09 UTC (rev 211051)
+++ trunk/Source/WebCore/ChangeLog 2017-01-23 20:58:35 UTC (rev 211052)
@@ -1,3 +1,28 @@
+2017-01-20 Anders Carlsson <ander...@apple.com>
+
+ When Safari reloads pages with Flash objects after Flash is installed, placeholders don't paint (but do work!)
+ https://bugs.webkit.org/show_bug.cgi?id=167268
+ rdar://problem/29857388
+
+ Reviewed by Sam Weinig.
+
+ * page/Page.cpp:
+ (WebCore::Page::refreshPlugins):
+ Call PluginInfoProvider::refresh instead.
+
+ (WebCore::Page::clearPluginData):
+ Add new setter.
+
+ * page/Page.h:
+ Declare new members.
+
+ * plugins/PluginInfoProvider.cpp:
+ (WebCore::PluginInfoProvider::refresh):
+ Put the logic to clear plug-in data and reload frames here.
+
+ * plugins/PluginInfoProvider.h:
+ Add new members.
+
2017-01-23 Jer Noble <jer.no...@apple.com>
REGRESSION (r208149): Video details does not apear and missing scrubber in Control Center
Modified: trunk/Source/WebCore/page/Page.cpp (211051 => 211052)
--- trunk/Source/WebCore/page/Page.cpp 2017-01-23 20:55:09 UTC (rev 211051)
+++ trunk/Source/WebCore/page/Page.cpp 2017-01-23 20:58:35 UTC (rev 211052)
@@ -539,24 +539,11 @@
Vector<Ref<Frame>> framesNeedingReload;
- for (auto& page : *allPages) {
+ for (auto& page : *allPages)
pluginInfoProviders.add(&page->pluginInfoProvider());
- page->m_pluginData = nullptr;
- if (!reload)
- continue;
-
- for (Frame* frame = &page->mainFrame(); frame; frame = frame->tree().traverseNext()) {
- if (frame->loader().subframeLoader().containsPlugins())
- framesNeedingReload.append(*frame);
- }
- }
-
for (auto& pluginInfoProvider : pluginInfoProviders)
- pluginInfoProvider->refreshPlugins();
-
- for (auto& frame : framesNeedingReload)
- frame->loader().reload();
+ pluginInfoProvider->refresh(reload);
}
PluginData& Page::pluginData()
@@ -566,6 +553,11 @@
return *m_pluginData;
}
+void Page::clearPluginData()
+{
+ m_pluginData = nullptr;
+}
+
bool Page::showAllPlugins() const
{
if (m_showAllPlugins)
Modified: trunk/Source/WebCore/page/Page.h (211051 => 211052)
--- trunk/Source/WebCore/page/Page.h 2017-01-23 20:55:09 UTC (rev 211051)
+++ trunk/Source/WebCore/page/Page.h 2017-01-23 20:58:35 UTC (rev 211052)
@@ -166,6 +166,7 @@
static void refreshPlugins(bool reload);
WEBCORE_EXPORT PluginData& pluginData();
+ void clearPluginData();
WEBCORE_EXPORT void setCanStartMedia(bool);
bool canStartMedia() const { return m_canStartMedia; }
Modified: trunk/Source/WebCore/plugins/PluginInfoProvider.cpp (211051 => 211052)
--- trunk/Source/WebCore/plugins/PluginInfoProvider.cpp 2017-01-23 20:55:09 UTC (rev 211051)
+++ trunk/Source/WebCore/plugins/PluginInfoProvider.cpp 2017-01-23 20:58:35 UTC (rev 211052)
@@ -26,6 +26,10 @@
#include "config.h"
#include "PluginInfoProvider.h"
+#include "MainFrame.h"
+#include "Page.h"
+#include "SubframeLoader.h"
+
namespace WebCore {
PluginInfoProvider::~PluginInfoProvider()
@@ -33,6 +37,26 @@
ASSERT(m_pages.isEmpty());
}
+void PluginInfoProvider::refresh(bool reloadPages)
+{
+ Vector<Ref<Frame>> framesNeedingReload;
+
+ for (auto& page : m_pages) {
+ page->clearPluginData();
+
+ if (!reloadPages)
+ continue;
+
+ for (Frame* frame = &page->mainFrame(); frame; frame = frame->tree().traverseNext()) {
+ if (frame->loader().subframeLoader().containsPlugins())
+ framesNeedingReload.append(*frame);
+ }
+ }
+
+ for (auto& frame : framesNeedingReload)
+ frame->loader().reload();
+}
+
void PluginInfoProvider::addPage(Page& page)
{
ASSERT(!m_pages.contains(&page));
Modified: trunk/Source/WebCore/plugins/PluginInfoProvider.h (211051 => 211052)
--- trunk/Source/WebCore/plugins/PluginInfoProvider.h 2017-01-23 20:55:09 UTC (rev 211051)
+++ trunk/Source/WebCore/plugins/PluginInfoProvider.h 2017-01-23 20:58:35 UTC (rev 211052)
@@ -34,16 +34,17 @@
public:
virtual ~PluginInfoProvider();
- void refreshPlugins(bool reloadPages);
+ void refresh(bool reloadPages);
void addPage(Page&);
void removePage(Page&);
- virtual void refreshPlugins() = 0;
virtual void getPluginInfo(Page&, Vector<PluginInfo>&) = 0;
virtual void getWebVisiblePluginInfo(Page&, Vector<PluginInfo>&) = 0;
private:
+ virtual void refreshPlugins() = 0;
+
HashSet<Page*> m_pages;
};
Modified: trunk/Source/WebKit2/ChangeLog (211051 => 211052)
--- trunk/Source/WebKit2/ChangeLog 2017-01-23 20:55:09 UTC (rev 211051)
+++ trunk/Source/WebKit2/ChangeLog 2017-01-23 20:58:35 UTC (rev 211052)
@@ -1,3 +1,18 @@
+2017-01-20 Anders Carlsson <ander...@apple.com>
+
+ When Safari reloads pages with Flash objects after Flash is installed, placeholders don't paint (but do work!)
+ https://bugs.webkit.org/show_bug.cgi?id=167268
+ rdar://problem/29857388
+
+ Reviewed by Sam Weinig.
+
+ * WebProcess/Plugins/WebPluginInfoProvider.h:
+ Make refreshPlugins() private.
+
+ * WebProcess/WebProcess.cpp:
+ (WebKit::WebProcess::refreshPlugins):
+ Call the newly added PluginInfoProvider::refresh().
+
2017-01-23 Antti Koivisto <an...@apple.com>
Use priorities in speculative revalidation
Modified: trunk/Source/WebKit2/WebProcess/Plugins/WebPluginInfoProvider.h (211051 => 211052)
--- trunk/Source/WebKit2/WebProcess/Plugins/WebPluginInfoProvider.h 2017-01-23 20:55:09 UTC (rev 211051)
+++ trunk/Source/WebKit2/WebProcess/Plugins/WebPluginInfoProvider.h 2017-01-23 20:58:35 UTC (rev 211052)
@@ -42,13 +42,12 @@
void clearPluginClientPolicies();
#endif
- void refreshPlugins() override;
-
private:
WebPluginInfoProvider();
void getPluginInfo(WebCore::Page&, Vector<WebCore::PluginInfo>&) override;
void getWebVisiblePluginInfo(WebCore::Page&, Vector<WebCore::PluginInfo>&) override;
+ void refreshPlugins() override;
#if ENABLE(NETSCAPE_PLUGIN_API)
void populatePluginCache(const WebCore::Page&);
Modified: trunk/Source/WebKit2/WebProcess/WebProcess.cpp (211051 => 211052)
--- trunk/Source/WebKit2/WebProcess/WebProcess.cpp 2017-01-23 20:55:09 UTC (rev 211051)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.cpp 2017-01-23 20:58:35 UTC (rev 211052)
@@ -907,7 +907,7 @@
void WebProcess::refreshPlugins()
{
#if ENABLE(NETSCAPE_PLUGIN_API)
- WebPluginInfoProvider::singleton().refreshPlugins();
+ WebPluginInfoProvider::singleton().refresh(false);
#endif
}