Index: test/FileSystemJsObject.cpp
===================================================================
--- a/test/FileSystemJsObject.cpp
+++ b/test/FileSystemJsObject.cpp
@@ -20,50 +20,45 @@
 #include "../src/Thread.h"
 
 namespace
 {
   class MockFileSystem : public AdblockPlus::FileSystem
   {
   public:
     bool success;
-    std::string contentToRead;
+    IOBuffer contentToRead;
     std::string lastWrittenPath;
-    std::string lastWrittenContent;
+    IOBuffer lastWrittenContent;
     std::string movedFrom;
     std::string movedTo;
     std::string removedPath;
     mutable std::string statPath;
     bool statExists;
     bool statIsDirectory;
     bool statIsFile;
     int statLastModified;
 
     MockFileSystem() : success(true)
     {
     }
 
-    std::shared_ptr<std::istream> Read(const std::string& path) const
+    IOBuffer Read(const std::string& path) const
     {
       if (!success)
         throw std::runtime_error("Unable to read " + path);
-      std::stringstream* const stream = new std::stringstream;
-      *stream << contentToRead;
-      return std::shared_ptr<std::istream>(stream);
+      return contentToRead;
     }
 
-    void Write(const std::string& path, std::istream& data)
+    void Write(const std::string& path, const IOBuffer& data)
     {
       if (!success)
         throw std::runtime_error("Unable to write to " + path);
       lastWrittenPath = path;
-
-      std::stringstream content;
-      content << data.rdbuf();
-      lastWrittenContent = content.str();
+      lastWrittenContent = data;
     }
 
     void Move(const std::string& fromPath, const std::string& toPath)
     {
       if (!success)
         throw std::runtime_error("Unable to move " + fromPath + " to "
                                  + toPath);
       movedFrom = fromPath;
@@ -120,17 +115,18 @@
       mockFileSystem = MockFileSystemPtr(new MockFileSystem);
       jsEngine->SetFileSystem(mockFileSystem);
     }
   };
 }
 
 TEST_F(FileSystemJsObjectTest, Read)
 {
-  mockFileSystem->contentToRead = "foo";
+  mockFileSystem->contentToRead =
+    AdblockPlus::FileSystem::IOBuffer{'f', 'o', 'o'};
   std::string content;
   std::string error;
   ReadFile(jsEngine, content, error);
   ASSERT_EQ("foo", content);
   ASSERT_EQ("", error);
 }
 
 TEST_F(FileSystemJsObjectTest, ReadIllegalArguments)
@@ -149,17 +145,18 @@
   ASSERT_EQ("", content);
 }
 
 TEST_F(FileSystemJsObjectTest, Write)
 {
   jsEngine->Evaluate("_fileSystem.write('foo', 'bar', function(e) {error = e})");
   AdblockPlus::Sleep(50);
   ASSERT_EQ("foo", mockFileSystem->lastWrittenPath);
-  ASSERT_EQ("bar", mockFileSystem->lastWrittenContent);
+  ASSERT_EQ((AdblockPlus::FileSystem::IOBuffer{'b', 'a', 'r'}),
+    mockFileSystem->lastWrittenContent);
   ASSERT_EQ("", jsEngine->Evaluate("error").AsString());
 }
 
 TEST_F(FileSystemJsObjectTest, WriteIllegalArguments)
 {
   ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.write()"));
   ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.write('', '', '')"));
 }
