summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJocelyn Turcotte <jocelyn.turcotte@digia.com>2014-09-17 13:56:10 +0200
committerJocelyn Turcotte <jocelyn.turcotte@digia.com>2014-09-17 15:27:28 +0200
commit9f18335913fc8b0fab3e1fcd2aea596bd8d650c9 (patch)
tree8b4f6fe46c5e10f9dd9bd4f0fb3d027290a20782
parent5ef0ef71b06b0d7949c88db6719fd43907f342fd (diff)
downloadqtwebkit-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.cpp8
-rw-r--r--Source/WebCore/plugins/PluginStream.h1
-rw-r--r--Source/WebCore/plugins/PluginView.cpp5
-rw-r--r--Source/WebCore/plugins/PluginView.h2
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;