[Libreoffice-commits] online.git: loleaflet/src loolwsd/LOOLWSD.cpp loolwsd/MasterProcessSession.cpp loolwsd/MasterProcessSession.hpp

Pranav Kant pranavk at collabora.com
Mon Apr 4 18:47:33 UTC 2016


 loleaflet/src/core/Socket.js     |    4 +++-
 loolwsd/LOOLWSD.cpp              |    3 +--
 loolwsd/MasterProcessSession.cpp |    6 +-----
 loolwsd/MasterProcessSession.hpp |    3 +++
 4 files changed, 8 insertions(+), 8 deletions(-)

New commits:
commit dc28273dcf5d8a9b73380f51e559c655e1c5c9a7
Author: Pranav Kant <pranavk at collabora.com>
Date:   Tue Apr 5 00:09:54 2016 +0530

    Fixed a regression in opening password protected docs
    
    Change-Id: Ife378538c98f091e271e0c474fb271c513887774

diff --git a/loleaflet/src/core/Socket.js b/loleaflet/src/core/Socket.js
index 9ca9b53..8b939f7 100644
--- a/loleaflet/src/core/Socket.js
+++ b/loleaflet/src/core/Socket.js
@@ -113,6 +113,8 @@ L.Socket = L.Class.extend({
 			}
 		}
 		else if (textMsg.startsWith('error:') && command.errorCmd === 'load') {
+			this.close();
+
 			var errorKind = command.errorKind;
 			var passwordNeeded = false;
 			if (errorKind.startsWith('passwordrequired')) {
@@ -139,7 +141,7 @@ L.Socket = L.Class.extend({
 					input: '<input name="password" type="password" required />',
 					callback: L.bind(function(data) {
 						this._map._docPassword = data.password;
-						this._onOpen();
+						this.initialize(this._map);
 					}, this)
 				});
 				return;
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index 1798d32..9c29d63 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -523,11 +523,10 @@ private:
             "Client_ws_" + id
             );
 
-        if (docBroker->getSessionsCount() == 1 && !normalShutdown)
+        if (docBroker->getSessionsCount() == 1 && !normalShutdown && !session->_bLoadError)
         {
             //TODO: This isn't this simple. We need to wait for the notification
             // of save so Storage can persist the save (if necessary).
-            // In addition, we shouldn't issue save when opening of the doc fails.
             Log::info("Non-deliberate shutdown of the last session, saving the document before tearing down.");
             queue->put("uno .uno:Save");
         }
diff --git a/loolwsd/MasterProcessSession.cpp b/loolwsd/MasterProcessSession.cpp
index 432e751..4544063 100644
--- a/loolwsd/MasterProcessSession.cpp
+++ b/loolwsd/MasterProcessSession.cpp
@@ -169,12 +169,8 @@ bool MasterProcessSession::_handleInput(const char *buffer, int length)
                             errorKind == "passwordrequired:to-modify" ||
                             errorKind == "wrongpassword")
                         {
-                            _isDocPasswordProtected = true;
-                            // Reset docURL so that client can send another load request with password
-                            peer->_docURL = "";
-                            // disconnect 'ToPrisoner' after letting client know that password is required
                             forwardToPeer(buffer, length);
-                            LOOLSession::disconnect();
+                            peer->_bLoadError = true;
                             return false;
                         }
                     }
diff --git a/loolwsd/MasterProcessSession.hpp b/loolwsd/MasterProcessSession.hpp
index 7838fd4..da7105f 100644
--- a/loolwsd/MasterProcessSession.hpp
+++ b/loolwsd/MasterProcessSession.hpp
@@ -64,6 +64,9 @@ public:
     time_t _idleSaveTime;
     time_t _autoSaveTime;
 
+    // Raise this flag on ToClient from ToPrisoner to let ToClient know of load failures
+    bool _bLoadError = false;
+
  protected:
     bool invalidateTiles(const char *buffer, int length, Poco::StringTokenizer& tokens);
 


More information about the Libreoffice-commits mailing list