test/integration-http-server.cpp |    2 +-
 wsd/LOOLWSD.cpp                  |   39 +++++++++++++++++++++------------------
 2 files changed, 22 insertions(+), 19 deletions(-)

New commits:
commit 25dee367d43d12b924dea75e702cdfa20252b97d
Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk>
Date:   Sun Mar 26 00:43:43 2017 -0400

    wsd: load the convert-to doc in callback
    
    Since this a fake session that doesn't
    have a client socket, we push the
    messages directly into the ClientSession.
    But since the DocBroker poll thread will
    probably not be ready by then, there
    is no child process and the other
    document bits needed to load (or indeed
    process any client messages).
    
    So we defer all the fake messages in
    a poll callback to insure they are done
    in the correct order.
    
    Change-Id: Id81dc4288b305829149e6e9c81d0f7da719c59ad
    Reviewed-on: https://gerrit.libreoffice.org/35712
    Reviewed-by: Ashod Nakashian <ashnak...@gmail.com>
    Tested-by: Ashod Nakashian <ashnak...@gmail.com>

diff --git a/test/integration-http-server.cpp b/test/integration-http-server.cpp
index 5db9c9a5..3530ed57 100644
--- a/test/integration-http-server.cpp
+++ b/test/integration-http-server.cpp
@@ -44,7 +44,7 @@ class HTTPServerTest : public CPPUNIT_NS::TestFixture
     CPPUNIT_TEST(testLoleafletPost);
     CPPUNIT_TEST(testScriptsAndLinksGet);
     CPPUNIT_TEST(testScriptsAndLinksPost);
-    // CPPUNIT_TEST(testConvertTo);
+    CPPUNIT_TEST(testConvertTo);
 
     CPPUNIT_TEST_SUITE_END();
 
diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index 4bb13ffc..eaa02fcb 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -1943,24 +1943,27 @@ private:
 
                         docBroker->startThread();
 
-                        // Load the document manually and request saving in 
the target format.
-                        std::string encodedFrom;
-                        URI::encode(docBroker->getPublicUri().getPath(), "", 
encodedFrom);
-                        const std::string load = "load url=" + encodedFrom;
-                        std::vector<char> loadRequest(load.begin(), 
load.end());
-                        clientSession->handleMessage(true, 
WebSocketHandler::WSOpCode::Text, loadRequest);
-
-                        // FIXME: Check for security violations.
-                        Path toPath(docBroker->getPublicUri().getPath());
-                        toPath.setExtension(format);
-                        const std::string toJailURL = "file://" + 
std::string(JAILED_DOCUMENT_ROOT) + toPath.getFileName();
-                        std::string encodedTo;
-                        URI::encode(toJailURL, "", encodedTo);
-
-                        // Convert it to the requested format.
-                        const auto saveas = "saveas url=" + encodedTo + " 
format=" + format + " options=";
-                        std::vector<char> saveasRequest(saveas.begin(), 
saveas.end());
-                        clientSession->handleMessage(true, 
WebSocketHandler::WSOpCode::Text, saveasRequest);
+                        docBroker->addCallback([&]()
+                        {
+                            // Load the document manually and request saving 
in the target format.
+                            std::string encodedFrom;
+                            URI::encode(docBroker->getPublicUri().getPath(), 
"", encodedFrom);
+                            const std::string load = "load url=" + encodedFrom;
+                            std::vector<char> loadRequest(load.begin(), 
load.end());
+                            clientSession->handleMessage(true, 
WebSocketHandler::WSOpCode::Text, loadRequest);
+
+                            // FIXME: Check for security violations.
+                            Path toPath(docBroker->getPublicUri().getPath());
+                            toPath.setExtension(format);
+                            const std::string toJailURL = "file://" + 
std::string(JAILED_DOCUMENT_ROOT) + toPath.getFileName();
+                            std::string encodedTo;
+                            URI::encode(toJailURL, "", encodedTo);
+
+                            // Convert it to the requested format.
+                            const auto saveas = "saveas url=" + encodedTo + " 
format=" + format + " options=";
+                            std::vector<char> saveasRequest(saveas.begin(), 
saveas.end());
+                            clientSession->handleMessage(true, 
WebSocketHandler::WSOpCode::Text, saveasRequest);
+                        });
 
                         sent = true;
                     }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to