[Libreoffice-commits] online.git: Branch 'distro/collabora/collabora-online-4' - 2 commits - common/Png.hpp ios/Mobile ios/Mobile.xcodeproj loleaflet/src

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Mar 22 14:03:48 UTC 2019


 common/Png.hpp                       |   18 +++++
 ios/Mobile.xcodeproj/project.pbxproj |  108 +++++++++++++++++++++++++++++++++++
 ios/Mobile/Document.mm               |   92 ++++++++++-------------------
 loleaflet/src/core/Socket.js         |   12 +++
 4 files changed, 167 insertions(+), 63 deletions(-)

New commits:
commit 373b34b47b7209a24d7d6060028fa5520ceb7aa0
Author:     Tor Lillqvist <tml at collabora.com>
AuthorDate: Fri Mar 22 16:03:07 2019 +0200
Commit:     Tor Lillqvist <tml at collabora.com>
CommitDate: Fri Mar 22 16:03:20 2019 +0200

    Add source files from sfx2/source/appl for convenience

diff --git a/ios/Mobile.xcodeproj/project.pbxproj b/ios/Mobile.xcodeproj/project.pbxproj
index 46a3b2029..130ecb090 100644
--- a/ios/Mobile.xcodeproj/project.pbxproj
+++ b/ios/Mobile.xcodeproj/project.pbxproj
@@ -449,6 +449,56 @@
 		BE8C0390223FC4ED0048B7EA /* rngitem.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = rngitem.cxx; path = "../../ios-device/svl/source/items/rngitem.cxx"; sourceTree = "<group>"; };
 		BE8C0391223FC4ED0048B7EA /* ptitem.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ptitem.cxx; path = "../../ios-device/svl/source/items/ptitem.cxx"; sourceTree = "<group>"; };
 		BE8C0392223FC4ED0048B7EA /* int64item.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = int64item.cxx; path = "../../ios-device/svl/source/items/int64item.cxx"; sourceTree = "<group>"; };
+		BE8C03942242BA650048B7EA /* impldde.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = impldde.hxx; path = "../../ios-device/sfx2/source/appl/impldde.hxx"; sourceTree = "<group>"; };
+		BE8C03952242BA650048B7EA /* appdispatchprovider.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = appdispatchprovider.cxx; path = "../../ios-device/sfx2/source/appl/appdispatchprovider.cxx"; sourceTree = "<group>"; };
+		BE8C03962242BA650048B7EA /* newhelp.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = newhelp.hxx; path = "../../ios-device/sfx2/source/appl/newhelp.hxx"; sourceTree = "<group>"; };
+		BE8C03972242BA650048B7EA /* fileobj.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = fileobj.cxx; path = "../../ios-device/sfx2/source/appl/fileobj.cxx"; sourceTree = "<group>"; };
+		BE8C03982242BA660048B7EA /* appbaslib.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = appbaslib.cxx; path = "../../ios-device/sfx2/source/appl/appbaslib.cxx"; sourceTree = "<group>"; };
+		BE8C03992242BA660048B7EA /* appmain.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = appmain.cxx; path = "../../ios-device/sfx2/source/appl/appmain.cxx"; sourceTree = "<group>"; };
+		BE8C039A2242BA660048B7EA /* helpdispatch.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = helpdispatch.hxx; path = "../../ios-device/sfx2/source/appl/helpdispatch.hxx"; sourceTree = "<group>"; };
+		BE8C039B2242BA660048B7EA /* appreg.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = appreg.cxx; path = "../../ios-device/sfx2/source/appl/appreg.cxx"; sourceTree = "<group>"; };
+		BE8C039C2242BA660048B7EA /* newhelp.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = newhelp.cxx; path = "../../ios-device/sfx2/source/appl/newhelp.cxx"; sourceTree = "<group>"; };
+		BE8C039D2242BA660048B7EA /* appquit.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = appquit.cxx; path = "../../ios-device/sfx2/source/appl/appquit.cxx"; sourceTree = "<group>"; };
+		BE8C039E2242BA660048B7EA /* shutdowniconunx.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = shutdowniconunx.cxx; path = "../../ios-device/sfx2/source/appl/shutdowniconunx.cxx"; sourceTree = "<group>"; };
+		BE8C039F2242BA660048B7EA /* impldde.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = impldde.cxx; path = "../../ios-device/sfx2/source/appl/impldde.cxx"; sourceTree = "<group>"; };
+		BE8C03A02242BA660048B7EA /* macroloader.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = macroloader.cxx; path = "../../ios-device/sfx2/source/appl/macroloader.cxx"; sourceTree = "<group>"; };
+		BE8C03A12242BA660048B7EA /* shutdowniconw32.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = shutdowniconw32.cxx; path = "../../ios-device/sfx2/source/appl/shutdowniconw32.cxx"; sourceTree = "<group>"; };
+		BE8C03A22242BA660048B7EA /* helpdispatch.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = helpdispatch.cxx; path = "../../ios-device/sfx2/source/appl/helpdispatch.cxx"; sourceTree = "<group>"; };
+		BE8C03A32242BA660048B7EA /* linkmgr2.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = linkmgr2.cxx; path = "../../ios-device/sfx2/source/appl/linkmgr2.cxx"; sourceTree = "<group>"; };
+		BE8C03A42242BA660048B7EA /* appdde.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = appdde.cxx; path = "../../ios-device/sfx2/source/appl/appdde.cxx"; sourceTree = "<group>"; };
+		BE8C03A52242BA660048B7EA /* app.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = app.cxx; path = "../../ios-device/sfx2/source/appl/app.cxx"; sourceTree = "<group>"; };
+		BE8C03A62242BA660048B7EA /* appserv.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = appserv.cxx; path = "../../ios-device/sfx2/source/appl/appserv.cxx"; sourceTree = "<group>"; };
+		BE8C03A72242BA660048B7EA /* appuno.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = appuno.cxx; path = "../../ios-device/sfx2/source/appl/appuno.cxx"; sourceTree = "<group>"; };
+		BE8C03A82242BA660048B7EA /* appcfg.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = appcfg.cxx; path = "../../ios-device/sfx2/source/appl/appcfg.cxx"; sourceTree = "<group>"; };
+		BE8C03A92242BA660048B7EA /* sfxpicklist.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sfxpicklist.cxx; path = "../../ios-device/sfx2/source/appl/sfxpicklist.cxx"; sourceTree = "<group>"; };
+		BE8C03AA2242BA660048B7EA /* shutdownicon.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = shutdownicon.cxx; path = "../../ios-device/sfx2/source/appl/shutdownicon.cxx"; sourceTree = "<group>"; };
+		BE8C03AB2242BA660048B7EA /* fwkhelper.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = fwkhelper.cxx; path = "../../ios-device/sfx2/source/appl/fwkhelper.cxx"; sourceTree = "<group>"; };
+		BE8C03AC2242BA660048B7EA /* imestatuswindow.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = imestatuswindow.cxx; path = "../../ios-device/sfx2/source/appl/imestatuswindow.cxx"; sourceTree = "<group>"; };
+		BE8C03AD2242BA660048B7EA /* module.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = module.cxx; path = "../../ios-device/sfx2/source/appl/module.cxx"; sourceTree = "<group>"; };
+		BE8C03AE2242BA670048B7EA /* childwinimpl.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = childwinimpl.cxx; path = "../../ios-device/sfx2/source/appl/childwinimpl.cxx"; sourceTree = "<group>"; };
+		BE8C03AF2242BA670048B7EA /* shutdownicon.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = shutdownicon.hxx; path = "../../ios-device/sfx2/source/appl/shutdownicon.hxx"; sourceTree = "<group>"; };
+		BE8C03B02242BA670048B7EA /* fileobj.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = fileobj.hxx; path = "../../ios-device/sfx2/source/appl/fileobj.hxx"; sourceTree = "<group>"; };
+		BE8C03B12242BA670048B7EA /* appbas.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = appbas.cxx; path = "../../ios-device/sfx2/source/appl/appbas.cxx"; sourceTree = "<group>"; };
+		BE8C03B22242BA670048B7EA /* opengrf.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = opengrf.cxx; path = "../../ios-device/sfx2/source/appl/opengrf.cxx"; sourceTree = "<group>"; };
+		BE8C03B32242BA670048B7EA /* preventduplicateinteraction.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = preventduplicateinteraction.cxx; path = "../../ios-device/sfx2/source/appl/preventduplicateinteraction.cxx"; sourceTree = "<group>"; };
+		BE8C03B42242BA670048B7EA /* lnkbase2.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = lnkbase2.cxx; path = "../../ios-device/sfx2/source/appl/lnkbase2.cxx"; sourceTree = "<group>"; };
+		BE8C03B52242BA670048B7EA /* appmisc.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = appmisc.cxx; path = "../../ios-device/sfx2/source/appl/appmisc.cxx"; sourceTree = "<group>"; };
+		BE8C03B62242BA670048B7EA /* shutdowniconaqua.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = shutdowniconaqua.mm; path = "../../ios-device/sfx2/source/appl/shutdowniconaqua.mm"; sourceTree = "<group>"; };
+		BE8C03B72242BA670048B7EA /* linksrc.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = linksrc.cxx; path = "../../ios-device/sfx2/source/appl/linksrc.cxx"; sourceTree = "<group>"; };
+		BE8C03B82242BA670048B7EA /* appopen.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = appopen.cxx; path = "../../ios-device/sfx2/source/appl/appopen.cxx"; sourceTree = "<group>"; };
+		BE8C03B92242BA670048B7EA /* xpackcreator.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = xpackcreator.cxx; path = "../../ios-device/sfx2/source/appl/xpackcreator.cxx"; sourceTree = "<group>"; };
+		BE8C03BA2242BA670048B7EA /* childwin.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = childwin.cxx; path = "../../ios-device/sfx2/source/appl/childwin.cxx"; sourceTree = "<group>"; };
+		BE8C03BB2242BA670048B7EA /* imestatuswindow.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = imestatuswindow.hxx; path = "../../ios-device/sfx2/source/appl/imestatuswindow.hxx"; sourceTree = "<group>"; };
+		BE8C03BC2242BA670048B7EA /* helpinterceptor.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = helpinterceptor.hxx; path = "../../ios-device/sfx2/source/appl/helpinterceptor.hxx"; sourceTree = "<group>"; };
+		BE8C03BD2242BA680048B7EA /* openuriexternally.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = openuriexternally.cxx; path = "../../ios-device/sfx2/source/appl/openuriexternally.cxx"; sourceTree = "<group>"; };
+		BE8C03BE2242BA680048B7EA /* appinit.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = appinit.cxx; path = "../../ios-device/sfx2/source/appl/appinit.cxx"; sourceTree = "<group>"; };
+		BE8C03BF2242BA680048B7EA /* sfxhelp.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sfxhelp.cxx; path = "../../ios-device/sfx2/source/appl/sfxhelp.cxx"; sourceTree = "<group>"; };
+		BE8C03C02242BA680048B7EA /* appchild.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = appchild.cxx; path = "../../ios-device/sfx2/source/appl/appchild.cxx"; sourceTree = "<group>"; };
+		BE8C03C12242BA680048B7EA /* helpinterceptor.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = helpinterceptor.cxx; path = "../../ios-device/sfx2/source/appl/helpinterceptor.cxx"; sourceTree = "<group>"; };
+		BE8C03C22242BA680048B7EA /* workwin.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = workwin.cxx; path = "../../ios-device/sfx2/source/appl/workwin.cxx"; sourceTree = "<group>"; };
+		BE8C03C32242BA680048B7EA /* appdata.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = appdata.cxx; path = "../../ios-device/sfx2/source/appl/appdata.cxx"; sourceTree = "<group>"; };
+		BE8C03C42242BA680048B7EA /* shellimpl.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = shellimpl.cxx; path = "../../ios-device/sfx2/source/appl/shellimpl.cxx"; sourceTree = "<group>"; };
+		BE8C03C52242BA680048B7EA /* panelist.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = panelist.hxx; path = "../../ios-device/sfx2/source/appl/panelist.hxx"; sourceTree = "<group>"; };
 		BE8D77272136762500AC58EA /* Mobile.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Mobile.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		BE8D772A2136762500AC58EA /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
 		BE8D772B2136762500AC58EA /* AppDelegate.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AppDelegate.mm; sourceTree = "<group>"; };
@@ -1321,6 +1371,63 @@
 			name = items;
 			sourceTree = "<group>";
 		};
+		BE8C03932242BA480048B7EA /* appl */ = {
+			isa = PBXGroup;
+			children = (
+				BE8C03A52242BA660048B7EA /* app.cxx */,
+				BE8C03B12242BA670048B7EA /* appbas.cxx */,
+				BE8C03982242BA660048B7EA /* appbaslib.cxx */,
+				BE8C03A82242BA660048B7EA /* appcfg.cxx */,
+				BE8C03C02242BA680048B7EA /* appchild.cxx */,
+				BE8C03C32242BA680048B7EA /* appdata.cxx */,
+				BE8C03A42242BA660048B7EA /* appdde.cxx */,
+				BE8C03952242BA650048B7EA /* appdispatchprovider.cxx */,
+				BE8C03BE2242BA680048B7EA /* appinit.cxx */,
+				BE8C03992242BA660048B7EA /* appmain.cxx */,
+				BE8C03B52242BA670048B7EA /* appmisc.cxx */,
+				BE8C03B82242BA670048B7EA /* appopen.cxx */,
+				BE8C039D2242BA660048B7EA /* appquit.cxx */,
+				BE8C039B2242BA660048B7EA /* appreg.cxx */,
+				BE8C03A62242BA660048B7EA /* appserv.cxx */,
+				BE8C03A72242BA660048B7EA /* appuno.cxx */,
+				BE8C03BA2242BA670048B7EA /* childwin.cxx */,
+				BE8C03AE2242BA670048B7EA /* childwinimpl.cxx */,
+				BE8C03972242BA650048B7EA /* fileobj.cxx */,
+				BE8C03B02242BA670048B7EA /* fileobj.hxx */,
+				BE8C03AB2242BA660048B7EA /* fwkhelper.cxx */,
+				BE8C03A22242BA660048B7EA /* helpdispatch.cxx */,
+				BE8C039A2242BA660048B7EA /* helpdispatch.hxx */,
+				BE8C03C12242BA680048B7EA /* helpinterceptor.cxx */,
+				BE8C03BC2242BA670048B7EA /* helpinterceptor.hxx */,
+				BE8C03AC2242BA660048B7EA /* imestatuswindow.cxx */,
+				BE8C03BB2242BA670048B7EA /* imestatuswindow.hxx */,
+				BE8C039F2242BA660048B7EA /* impldde.cxx */,
+				BE8C03942242BA650048B7EA /* impldde.hxx */,
+				BE8C03A32242BA660048B7EA /* linkmgr2.cxx */,
+				BE8C03B72242BA670048B7EA /* linksrc.cxx */,
+				BE8C03B42242BA670048B7EA /* lnkbase2.cxx */,
+				BE8C03A02242BA660048B7EA /* macroloader.cxx */,
+				BE8C03AD2242BA660048B7EA /* module.cxx */,
+				BE8C039C2242BA660048B7EA /* newhelp.cxx */,
+				BE8C03962242BA650048B7EA /* newhelp.hxx */,
+				BE8C03B22242BA670048B7EA /* opengrf.cxx */,
+				BE8C03BD2242BA680048B7EA /* openuriexternally.cxx */,
+				BE8C03C52242BA680048B7EA /* panelist.hxx */,
+				BE8C03B32242BA670048B7EA /* preventduplicateinteraction.cxx */,
+				BE8C03BF2242BA680048B7EA /* sfxhelp.cxx */,
+				BE8C03A92242BA660048B7EA /* sfxpicklist.cxx */,
+				BE8C03C42242BA680048B7EA /* shellimpl.cxx */,
+				BE8C03AA2242BA660048B7EA /* shutdownicon.cxx */,
+				BE8C03AF2242BA670048B7EA /* shutdownicon.hxx */,
+				BE8C03B62242BA670048B7EA /* shutdowniconaqua.mm */,
+				BE8C039E2242BA660048B7EA /* shutdowniconunx.cxx */,
+				BE8C03A12242BA660048B7EA /* shutdowniconw32.cxx */,
+				BE8C03C22242BA680048B7EA /* workwin.cxx */,
+				BE8C03B92242BA670048B7EA /* xpackcreator.cxx */,
+			);
+			name = appl;
+			sourceTree = "<group>";
+		};
 		BE8D771E2136762500AC58EA = {
 			isa = PBXGroup;
 			children = (
@@ -1421,6 +1528,7 @@
 		BE93D43C216D555C007A39F4 /* sfx2 */ = {
 			isa = PBXGroup;
 			children = (
+				BE8C03932242BA480048B7EA /* appl */,
 				BE93D43D216D5568007A39F4 /* doc */,
 			);
 			name = sfx2;
commit a26c6f9847640258ed0490682da789298f6651a6
Author:     Tor Lillqvist <tml at collabora.com>
AuthorDate: Fri Mar 22 15:49:47 2019 +0200
Commit:     Tor Lillqvist <tml at collabora.com>
CommitDate: Fri Mar 22 16:03:20 2019 +0200

    For iOS, generate the data: URLs for the PNG tiles already in the Online code
    
    (What we cache is also the textual data: URLs even if we store them
    using .png file names.)
    
    This avoids the current back-and-forth-encoding: First we
    base64-encode the complete binary "tile:" message (one text line
    followed by a newline and the binary PNG) to pass to WebKit, then in
    the JavaScript snippet passed to WebKit we decode the base64 and turn
    it into an ArrayBuffer, and then we unpack the ArrayBuffer and encode
    the PNG part to use as a data: URL.

diff --git a/common/Png.hpp b/common/Png.hpp
index 84861fc48..0d40a37a0 100644
--- a/common/Png.hpp
+++ b/common/Png.hpp
@@ -52,6 +52,10 @@
 #include <cassert>
 #include <chrono>
 
+#ifdef IOS
+#include <Foundation/Foundation.h>
+#endif
+
 #include "Log.hpp"
 #include "SpookyV2.h"
 
@@ -134,6 +138,10 @@ bool encodeSubBufferToPNG(unsigned char* pixmap, size_t startX, size_t startY,
     png_set_compression_level(png_ptr, Z_BEST_SPEED);
 #endif
 
+#ifdef IOS
+    auto initialSize = output.size();
+#endif
+
     png_set_IHDR(png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_RGB_ALPHA, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
 
     png_set_write_fn(png_ptr, &output, user_write_fn, user_flush_fn);
@@ -169,6 +177,16 @@ bool encodeSubBufferToPNG(unsigned char* pixmap, size_t startX, size_t startY,
 
     png_destroy_write_struct(&png_ptr, &info_ptr);
 
+#ifdef IOS
+    auto base64 = [[NSData dataWithBytesNoCopy:output.data() + initialSize length:(output.size() - initialSize) freeWhenDone:NO] base64EncodedDataWithOptions:0];
+
+    const char dataURLStart[] = "data:image/png;base64,";
+
+    output.resize(initialSize);
+    output.insert(output.end(), dataURLStart, dataURLStart + sizeof(dataURLStart)-1);
+    output.insert(output.end(), (char*)base64.bytes, (char*)base64.bytes + base64.length);
+#endif
+
     return true;
 }
 
diff --git a/ios/Mobile/Document.mm b/ios/Mobile/Document.mm
index 8550bc3e8..5473ef081 100644
--- a/ios/Mobile/Document.mm
+++ b/ios/Mobile/Document.mm
@@ -84,69 +84,39 @@
 
     NSString *js;
 
-    // Check if the message is binary. We say that any message that isn't just a single line is
-    // "binary" even if that strictly speaking isn't the case; for instance the commandvalues:
-    // message has a long bunch of non-binary JSON on multiple lines. But _onMessage() in Socket.js
-    // handles it fine even if such a message, too, comes in as an ArrayBuffer. (Look for the
-    // "textMsg = String.fromCharCode.apply(null, imgBytes);".)
-
-    const char *newline = (const char *)memchr(buffer, '\n', length);
-    if (newline != nullptr) {
-        // The data needs to be an ArrayBuffer
-        js = @"window.TheFakeWebSocket.onmessage({'data': Base64ToArrayBuffer('";
-        js = [js stringByAppendingString: [[NSData dataWithBytes:buffer length:length] base64EncodedStringWithOptions:0]];
-        js = [js stringByAppendingString:@"')});"];
-        NSString *subjs = [js substringToIndex:std::min(100ul, js.length)];
-        if (subjs.length < js.length)
-            subjs = [subjs stringByAppendingString:@"..."];
-
-        // LOG_TRC("Evaluating JavaScript: " << [subjs UTF8String]);
-
-        dispatch_async(dispatch_get_main_queue(), ^{
-                [self.viewController.webView evaluateJavaScript:js
-                                              completionHandler:^(id _Nullable obj, NSError * _Nullable error)
-                     {
-                         if (error) {
-                             LOG_ERR("Error after " << [subjs UTF8String] << ": " << [error.localizedDescription UTF8String]);
-                         }
-                     }
-                 ];
-        });
-    } else {
-        const unsigned char *ubufp = (const unsigned char *)buffer;
-        std::vector<char> data;
-        for (int i = 0; i < length; i++) {
-            if (ubufp[i] < ' ' || ubufp[i] == '\'' || ubufp[i] == '\\') {
-                data.push_back('\\');
-                data.push_back('x');
-                data.push_back("0123456789abcdef"[(ubufp[i] >> 4) & 0x0F]);
-                data.push_back("0123456789abcdef"[ubufp[i] & 0x0F]);
-            } else {
-                data.push_back(ubufp[i]);
-            }
+    const unsigned char *ubufp = (const unsigned char *)buffer;
+    std::vector<char> data;
+    for (int i = 0; i < length; i++) {
+        if (ubufp[i] < ' ' || ubufp[i] == '\'' || ubufp[i] == '\\') {
+            data.push_back('\\');
+            data.push_back('x');
+            data.push_back("0123456789abcdef"[(ubufp[i] >> 4) & 0x0F]);
+            data.push_back("0123456789abcdef"[ubufp[i] & 0x0F]);
+        } else {
+            data.push_back(ubufp[i]);
         }
-        data.push_back(0);
-
-        js = @"window.TheFakeWebSocket.onmessage({'data': '";
-        js = [js stringByAppendingString:[NSString stringWithUTF8String:data.data()]];
-        js = [js stringByAppendingString:@"'});"];
-
-        // LOG_TRC("Evaluating JavaScript: " << [js UTF8String]);
-
-        dispatch_async(dispatch_get_main_queue(), ^{
-                [self.viewController.webView evaluateJavaScript:js
-                                              completionHandler:^(id _Nullable obj, NSError * _Nullable error)
-                     {
-                         if (error) {
-                             LOG_ERR("Error after " << [js UTF8String] << ": " << [[error localizedDescription] UTF8String]);
-                             NSString *jsException = error.userInfo[@"WKJavaScriptExceptionMessage"];
-                             if (jsException != nil)
-                                 LOG_ERR("JavaScript exception: " << [jsException UTF8String]);
-                         }
-                     }
-                 ];
-            });
     }
+    data.push_back(0);
+
+    js = @"window.TheFakeWebSocket.onmessage({'data': '";
+    js = [js stringByAppendingString:[NSString stringWithUTF8String:data.data()]];
+    js = [js stringByAppendingString:@"'});"];
+
+    // LOG_TRC("Evaluating JavaScript: " << [js UTF8String]);
+
+    dispatch_async(dispatch_get_main_queue(), ^{
+            [self.viewController.webView evaluateJavaScript:js
+                                          completionHandler:^(id _Nullable obj, NSError * _Nullable error)
+                 {
+                     if (error) {
+                         LOG_ERR("Error after " << [js UTF8String] << ": " << [[error localizedDescription] UTF8String]);
+                         NSString *jsException = error.userInfo[@"WKJavaScriptExceptionMessage"];
+                         if (jsException != nil)
+                             LOG_ERR("JavaScript exception: " << [jsException UTF8String]);
+                     }
+                 }
+             ];
+        });
 }
 
 @end
diff --git a/loleaflet/src/core/Socket.js b/loleaflet/src/core/Socket.js
index 541dc92a0..85c459c0f 100644
--- a/loleaflet/src/core/Socket.js
+++ b/loleaflet/src/core/Socket.js
@@ -239,7 +239,7 @@ L.Socket = L.Class.extend({
 	},
 
 	_onMessage: function (e) {
-		var imgBytes, index, textMsg;
+		var imgBytes, index, textMsg, img;
 
 		if (typeof (e.data) === 'string') {
 			textMsg = e.data;
@@ -742,13 +742,21 @@ L.Socket = L.Class.extend({
 				textMsg = decodeURIComponent(window.escape(textMsg));
 			}
 		}
+		else if (window.ThisIsTheiOSApp) {
+			// In the iOS app, the native code sends us the PNG tile already as a data: URL after the newline
+			var newlineIndex = textMsg.indexOf('\n');
+			if (newlineIndex > 0) {
+				img = textMsg.substring(newlineIndex+1);
+				textMsg = textMsg.substring(0, newlineIndex);
+			}
+		}
 		else {
 			var data = imgBytes.subarray(index + 1);
 
 			if (data.length > 0 && data[0] == 68 /* D */)
 			{
 				console.log('Socket: got a delta !');
-				var img = data;
+				img = data;
 			}
 			else
 			{


More information about the Libreoffice-commits mailing list