https://bugs.webkit.org/show_bug.cgi?id=149741
<rdar://problem/
22920949>
Patch by Conrad Shultz and Ricky Mondello.
Patch by Ricky Mondello <rmondello@apple.com> on 2015-10-03
Reviewed by Anders Carlsson.
Source/WebCore:
No new tests are added.
Add PluginData API to check whether a MIME type is supported, regardless of plug-in visibility.
* plugins/PluginData.cpp:
(WebCore::PluginData::getWebVisibleMimesAndPluginIndices): Adopt getMimesAndPluginIndiciesForPlugins.
(WebCore::PluginData::getMimesAndPluginIndices): Added.
(WebCore::PluginData::getMimesAndPluginIndiciesForPlugins): Essentially factored out of
getWebVisibleMimesAndPluginIndices.
(WebCore::PluginData::supportsMimeType): Added. Somewhat similar to preexisting supportsWebVisibleMimeType.
* plugins/PluginData.h: Declare supportsMimeType.
Source/WebKit2:
If a WebKit client sets plug-in X to not be visible to the web, that doesn't mean we shouldn't consult
that plug-in when determining what kind of object type an object is. Properly classifying a non-web-visible
Netscape plug-in as such allows its bounds to properly measured, allowing it to be drawn properly.
* WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
(WebKit::WebFrameLoaderClient::objectContentType): Use PluginData's supportsMimeType, rather than its
supportsWebVisibleMimeType, when determining the ObjectContentType for a MIME type on a url.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190547
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2015-10-03 Ricky Mondello <rmondello@apple.com>
+
+ "Plug-in is blocked" message doesn't draw correctly
+ https://bugs.webkit.org/show_bug.cgi?id=149741
+ <rdar://problem/22920949>
+
+ Patch by Conrad Shultz and Ricky Mondello.
+
+ Reviewed by Anders Carlsson.
+
+ No new tests are added.
+
+ Add PluginData API to check whether a MIME type is supported, regardless of plug-in visibility.
+
+ * plugins/PluginData.cpp:
+ (WebCore::PluginData::getWebVisibleMimesAndPluginIndices): Adopt getMimesAndPluginIndiciesForPlugins.
+ (WebCore::PluginData::getMimesAndPluginIndices): Added.
+ (WebCore::PluginData::getMimesAndPluginIndiciesForPlugins): Essentially factored out of
+ getWebVisibleMimesAndPluginIndices.
+ (WebCore::PluginData::supportsMimeType): Added. Somewhat similar to preexisting supportsWebVisibleMimeType.
+ * plugins/PluginData.h: Declare supportsMimeType.
+
2015-10-02 Antti Koivisto <antti@apple.com>
Inserting a child to a slot assigned node doesn't trigger repaint
void PluginData::getWebVisibleMimesAndPluginIndices(Vector<MimeClassInfo>& mimes, Vector<size_t>& mimePluginIndices) const
{
+ getMimesAndPluginIndiciesForPlugins(webVisiblePlugins(), mimes, mimePluginIndices);
+}
+
+void PluginData::getMimesAndPluginIndices(Vector<MimeClassInfo>& mimes, Vector<size_t>& mimePluginIndices) const
+{
+ getMimesAndPluginIndiciesForPlugins(plugins(), mimes, mimePluginIndices);
+}
+
+void PluginData::getMimesAndPluginIndiciesForPlugins(const Vector<PluginInfo>& plugins, Vector<MimeClassInfo>& mimes, Vector<size_t>& mimePluginIndices) const
+{
ASSERT_ARG(mimes, mimes.isEmpty());
ASSERT_ARG(mimePluginIndices, mimePluginIndices.isEmpty());
- const Vector<PluginInfo>& plugins = webVisiblePlugins();
for (unsigned i = 0; i < plugins.size(); ++i) {
const PluginInfo& plugin = plugins[i];
for (auto& mime : plugin.mimes) {
return String();
}
+bool PluginData::supportsMimeType(const String& mimeType, const AllowedPluginTypes allowedPluginTypes) const
+{
+ Vector<MimeClassInfo> mimes;
+ Vector<size_t> mimePluginIndices;
+ const Vector<PluginInfo>& plugins = this->plugins();
+ getMimesAndPluginIndices(mimes, mimePluginIndices);
+
+ for (unsigned i = 0; i < mimes.size(); ++i) {
+ if (mimes[i].type == mimeType && (allowedPluginTypes == AllPlugins || plugins[mimePluginIndices[i]].isApplicationPlugin))
+ return true;
+ }
+ return false;
+}
+
void PluginData::refresh()
{
platformStrategies()->pluginStrategy()->refreshPlugins();
String pluginNameForWebVisibleMimeType(const String& mimeType) const;
String pluginFileForWebVisibleMimeType(const String& mimeType) const;
+ WEBCORE_EXPORT bool supportsMimeType(const String& mimeType, const AllowedPluginTypes) const;
+
static void refresh();
private:
explicit PluginData(const Page*);
void initPlugins();
bool getPluginInfoForWebVisibleMimeType(const String& mimeType, PluginInfo&) const;
+ void getMimesAndPluginIndices(Vector<MimeClassInfo>&, Vector<size_t>&) const;
+ void getMimesAndPluginIndiciesForPlugins(const Vector<PluginInfo>&, Vector<MimeClassInfo>&, Vector<size_t>&) const;
protected:
#if defined ENABLE_WEB_REPLAY && ENABLE_WEB_REPLAY
+2015-10-03 Ricky Mondello <rmondello@apple.com>
+
+ "Plug-in is blocked" message doesn't draw correctly
+ https://bugs.webkit.org/show_bug.cgi?id=149741
+ <rdar://problem/22920949>
+
+ Patch by Conrad Shultz and Ricky Mondello.
+
+ Reviewed by Anders Carlsson.
+
+ If a WebKit client sets plug-in X to not be visible to the web, that doesn't mean we shouldn't consult
+ that plug-in when determining what kind of object type an object is. Properly classifying a non-web-visible
+ Netscape plug-in as such allows its bounds to properly measured, allowing it to be drawn properly.
+
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::objectContentType): Use PluginData's supportsMimeType, rather than its
+ supportsWebVisibleMimeType, when determining the ObjectContentType for a MIME type on a url.
+
2015-10-02 Enrica Casucci <enrica@apple.com>
Text selection is inaccurate in Wikipedia pages when starting navigation from wikipedia.org.
bool plugInSupportsMIMEType = false;
if (WebPage* webPage = m_frame->page()) {
const PluginData& pluginData = webPage->corePage()->pluginData();
- if (pluginData.supportsWebVisibleMimeType(mimeType, PluginData::AllPlugins) && webFrame()->coreFrame()->loader().subframeLoader().allowPlugins())
+ if (pluginData.supportsMimeType(mimeType, PluginData::AllPlugins) && webFrame()->coreFrame()->loader().subframeLoader().allowPlugins())
plugInSupportsMIMEType = true;
- else if (pluginData.supportsWebVisibleMimeType(mimeType, PluginData::OnlyApplicationPlugins))
+ else if (pluginData.supportsMimeType(mimeType, PluginData::OnlyApplicationPlugins))
plugInSupportsMIMEType = true;
}