Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
"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.

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.

Canonical link: https://commits.webkit.org/167895@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190547 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
rmondello authored and webkit-commit-queue committed Oct 4, 2015
1 parent 3f6b1e9 commit 000fc6e
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 3 deletions.
22 changes: 22 additions & 0 deletions Source/WebCore/ChangeLog
@@ -1,3 +1,25 @@
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
Expand Down
25 changes: 24 additions & 1 deletion Source/WebCore/plugins/PluginData.cpp
Expand Up @@ -45,11 +45,20 @@ Vector<PluginInfo> PluginData::webVisiblePlugins() const
}

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) {
Expand Down Expand Up @@ -108,6 +117,20 @@ String PluginData::pluginFileForWebVisibleMimeType(const String& mimeType) const
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();
Expand Down
4 changes: 4 additions & 0 deletions Source/WebCore/plugins/PluginData.h
Expand Up @@ -100,12 +100,16 @@ class PluginData : public RefCounted<PluginData> {
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
Expand Down
18 changes: 18 additions & 0 deletions Source/WebKit2/ChangeLog
@@ -1,3 +1,21 @@
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.
Expand Down
Expand Up @@ -1534,9 +1534,9 @@ ObjectContentType WebFrameLoaderClient::objectContentType(const URL& url, const
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;
}

Expand Down

0 comments on commit 000fc6e

Please sign in to comment.