diff options
| author | Jocelyn Turcotte <jocelyn.turcotte@digia.com> | 2014-09-17 13:56:10 +0200 |
|---|---|---|
| committer | Jocelyn Turcotte <jocelyn.turcotte@digia.com> | 2014-09-17 15:27:28 +0200 |
| commit | 9f18335913fc8b0fab3e1fcd2aea596bd8d650c9 (patch) | |
| tree | 8b4f6fe46c5e10f9dd9bd4f0fb3d027290a20782 | |
| parent | 5ef0ef71b06b0d7949c88db6719fd43907f342fd (diff) | |
| download | qtwebkit-9f18335913fc8b0fab3e1fcd2aea596bd8d650c9.tar.gz | |
Fix the Adobe Reader plugin loading of local pdf files
The Adobe Reader plugin can take a while to load and we must make sure
that the temporary file handle stays valid until it was able to pick it.
Keep track of resources loaded to temporary files and delete those files
only when destroying the plugin instance.
Task-number: QTBUG-36425
Change-Id: I2c5c2d11dc4710b11e4c4d6a574c5f968f4b2517
Reviewed-by: Michael Bruning <michael.bruning@digia.com>
| -rw-r--r-- | Source/WebCore/plugins/PluginStream.cpp | 8 | ||||
| -rw-r--r-- | Source/WebCore/plugins/PluginStream.h | 1 | ||||
| -rw-r--r-- | Source/WebCore/plugins/PluginView.cpp | 5 | ||||
| -rw-r--r-- | Source/WebCore/plugins/PluginView.h | 2 |
4 files changed, 14 insertions, 2 deletions
diff --git a/Source/WebCore/plugins/PluginStream.cpp b/Source/WebCore/plugins/PluginStream.cpp index b03436166..8fb5d6e34 100644 --- a/Source/WebCore/plugins/PluginStream.cpp +++ b/Source/WebCore/plugins/PluginStream.cpp @@ -307,8 +307,12 @@ void PluginStream::destroyStream() if (!m_loadManually && m_client) m_client->streamDidFinishLoading(this); - if (!m_path.isNull()) - deleteFile(m_path); + if (!m_path.isNull()) { + if (m_client) + m_client->streamDidSaveTempFile(m_path); + else + deleteFile(m_path); + } } void PluginStream::delayDeliveryTimerFired(Timer<PluginStream>* timer) diff --git a/Source/WebCore/plugins/PluginStream.h b/Source/WebCore/plugins/PluginStream.h index 55d1702bf..52606b8be 100644 --- a/Source/WebCore/plugins/PluginStream.h +++ b/Source/WebCore/plugins/PluginStream.h @@ -52,6 +52,7 @@ namespace WebCore { class PluginStreamClient { public: virtual ~PluginStreamClient() {} + virtual void streamDidSaveTempFile(const String &) {} virtual void streamDidFinishLoading(PluginStream*) {} }; diff --git a/Source/WebCore/plugins/PluginView.cpp b/Source/WebCore/plugins/PluginView.cpp index 74fd5d79a..237cda701 100644 --- a/Source/WebCore/plugins/PluginView.cpp +++ b/Source/WebCore/plugins/PluginView.cpp @@ -383,6 +383,11 @@ void PluginView::stop() LOG_NPERROR(npErr); PluginView::setCurrentPluginView(0); + Vector<String>::iterator e = m_streamTempFilePaths.end(); + for (Vector<String>::iterator it = m_streamTempFilePaths.begin(); it != e; ++it) + deleteFile(*it); + m_streamTempFilePaths.clear(); + #if ENABLE(NETSCAPE_PLUGIN_API) if (savedData) { // TODO: Actually save this data instead of just discarding it diff --git a/Source/WebCore/plugins/PluginView.h b/Source/WebCore/plugins/PluginView.h index a81bd0ad4..0fa2436d4 100644 --- a/Source/WebCore/plugins/PluginView.h +++ b/Source/WebCore/plugins/PluginView.h @@ -194,6 +194,7 @@ namespace WebCore { void privateBrowsingStateChanged(bool); void disconnectStream(PluginStream*); + void streamDidSaveTempFile(const String &path) { m_streamTempFilePaths.append(path); } void streamDidFinishLoading(PluginStream* stream) { disconnectStream(stream); } // Widget functions @@ -364,6 +365,7 @@ namespace WebCore { HashSet<RefPtr<PluginStream> > m_streams; Vector<OwnPtr<PluginRequest> > m_requests; + Vector<String> m_streamTempFilePaths; bool m_isWindowed; bool m_isTransparent; |
