Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(141)

Side by Side Diff: native_client_sdk/src/examples/api/file_io/file_io.cc

Issue 15969018: Add directory_entry.cc to libppapi_cpp (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /// @file file_io.cc 5 /// @file file_io.cc
6 /// This example demonstrates the use of persistent file I/O 6 /// This example demonstrates the use of persistent file I/O
7 7
8 #define __STDC_LIMIT_MACROS 8 #define __STDC_LIMIT_MACROS
9 #include <sstream> 9 #include <sstream>
10 #include <string> 10 #include <string>
11 11
12 #include "ppapi/c/pp_stdint.h" 12 #include "ppapi/c/pp_stdint.h"
13 #include "ppapi/c/ppb_file_io.h" 13 #include "ppapi/c/ppb_file_io.h"
14 #include "ppapi/cpp/directory_entry.h"
14 #include "ppapi/cpp/file_io.h" 15 #include "ppapi/cpp/file_io.h"
15 #include "ppapi/cpp/file_ref.h" 16 #include "ppapi/cpp/file_ref.h"
16 #include "ppapi/cpp/file_system.h" 17 #include "ppapi/cpp/file_system.h"
17 #include "ppapi/cpp/instance.h" 18 #include "ppapi/cpp/instance.h"
18 #include "ppapi/cpp/message_loop.h" 19 #include "ppapi/cpp/message_loop.h"
19 #include "ppapi/cpp/module.h" 20 #include "ppapi/cpp/module.h"
20 #include "ppapi/cpp/var.h" 21 #include "ppapi/cpp/var.h"
21 #include "ppapi/utility/completion_callback_factory.h" 22 #include "ppapi/utility/completion_callback_factory.h"
22 #include "ppapi/utility/threading/simple_thread.h" 23 #include "ppapi/utility/threading/simple_thread.h"
23 24
24 #ifndef INT32_MAX 25 #ifndef INT32_MAX
25 #define INT32_MAX (0x7FFFFFFF) 26 #define INT32_MAX (0x7FFFFFFF)
26 #endif 27 #endif
27 28
28 #ifdef WIN32 29 #ifdef WIN32
29 #undef min 30 #undef min
30 #undef max 31 #undef max
31 #undef PostMessage 32 #undef PostMessage
32 33
33 // Allow 'this' in initializer list 34 // Allow 'this' in initializer list
34 #pragma warning(disable : 4355) 35 #pragma warning(disable : 4355)
35 #endif 36 #endif
36 37
37 namespace { 38 namespace {
38 /// Used for our simple protocol to communicate with Javascript 39 /// Used for our simple protocol to communicate with Javascript
39 const char* const kLoadPrefix = "ld"; 40 const char* const kLoadPrefix = "ld";
40 const char* const kSavePrefix = "sv"; 41 const char* const kSavePrefix = "sv";
41 const char* const kDeletePrefix = "de"; 42 const char* const kDeletePrefix = "de";
43 const char* const kListPrefix = "ls";
42 } 44 }
43 45
44 /// The Instance class. One of these exists for each instance of your NaCl 46 /// The Instance class. One of these exists for each instance of your NaCl
45 /// module on the web page. The browser will ask the Module object to create 47 /// module on the web page. The browser will ask the Module object to create
46 /// a new Instance for each occurrence of the <embed> tag that has these 48 /// a new Instance for each occurrence of the <embed> tag that has these
47 /// attributes: 49 /// attributes:
48 /// type="application/x-nacl" 50 /// type="application/x-nacl"
49 /// src="file_io.nmf" 51 /// src="file_io.nmf"
50 class FileIoInstance : public pp::Instance { 52 class FileIoInstance : public pp::Instance {
51 public: 53 public:
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 file_thread_.message_loop().PostWork(callback_factory_.NewCallback( 128 file_thread_.message_loop().PostWork(callback_factory_.NewCallback(
127 &FileIoInstance::Save, file_name, file_text)); 129 &FileIoInstance::Save, file_name, file_text));
128 return; 130 return;
129 } 131 }
130 132
131 if (instruction.compare(kDeletePrefix) == 0) { 133 if (instruction.compare(kDeletePrefix) == 0) {
132 file_thread_.message_loop().PostWork( 134 file_thread_.message_loop().PostWork(
133 callback_factory_.NewCallback(&FileIoInstance::Delete, file_name)); 135 callback_factory_.NewCallback(&FileIoInstance::Delete, file_name));
134 return; 136 return;
135 } 137 }
138
139 if (instruction.compare(kListPrefix) == 0) {
140 const std::string& dir_name = file_name;
141 file_thread_.message_loop().PostWork(
142 callback_factory_.NewCallback(&FileIoInstance::List, dir_name));
143 return;
144 }
136 } 145 }
137 146
138 void OpenFileSystem(int32_t /* result */) { 147 void OpenFileSystem(int32_t /* result */) {
139 int32_t rv = file_system_.Open(1024 * 1024, pp::CompletionCallback()); 148 int32_t rv = file_system_.Open(1024 * 1024, pp::CompletionCallback());
140 if (rv == PP_OK) { 149 if (rv == PP_OK) {
141 file_system_ready_ = true; 150 file_system_ready_ = true;
142 // Notify the user interface that we're ready 151 // Notify the user interface that we're ready
143 PostMessage(pp::Var("READY|")); 152 PostMessage(pp::Var("READY|"));
144 } else { 153 } else {
145 ShowErrorMessage("Failed to open file system", rv); 154 ShowErrorMessage("Failed to open file system", rv);
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 if (result == PP_ERROR_FILENOTFOUND) { 269 if (result == PP_ERROR_FILENOTFOUND) {
261 ShowStatusMessage("File not found"); 270 ShowStatusMessage("File not found");
262 return; 271 return;
263 } else if (result != PP_OK) { 272 } else if (result != PP_OK) {
264 ShowErrorMessage("Deletion failed", result); 273 ShowErrorMessage("Deletion failed", result);
265 return; 274 return;
266 } 275 }
267 ShowStatusMessage("File deleted"); 276 ShowStatusMessage("File deleted");
268 } 277 }
269 278
279 void List(int32_t /* result */, const std::string& dir_name) {
280 if (!file_system_ready_) {
281 ShowErrorMessage("File system is not open", PP_ERROR_FAILED);
282 return;
283 }
284 pp::FileRef ref(file_system_, dir_name.c_str());
285
286 // Pass ref along to keep it alive.
287 ref.ReadDirectoryEntries(callback_factory_.NewCallbackWithOutput(
288 &FileIoInstance::ListCallback, ref));
289 }
290
291 void ListCallback(int32_t result,
292 const std::vector<pp::DirectoryEntry>& entries,
293 pp::FileRef /* unused_ref */) {
294 if (result != PP_OK) {
295 ShowErrorMessage("List failed", result);
296 return;
297 }
298
299 std::string buffer = "File list:";
300 for (size_t i = 0; i < entries.size(); ++i) {
301 pp::Var name = entries[i].file_ref().GetName();
302 if (name.is_string())
303 buffer += " " + name.AsString();
304 }
305 ShowStatusMessage(buffer);
306 }
307
270 /// Encapsulates our simple javascript communication protocol 308 /// Encapsulates our simple javascript communication protocol
271 void ShowErrorMessage(const std::string& message, int32_t result) { 309 void ShowErrorMessage(const std::string& message, int32_t result) {
272 std::stringstream ss; 310 std::stringstream ss;
273 ss << "ERR|" << message << " -- Error #: " << result; 311 ss << "ERR|" << message << " -- Error #: " << result;
274 PostMessage(pp::Var(ss.str())); 312 PostMessage(pp::Var(ss.str()));
275 } 313 }
276 314
277 /// Encapsulates our simple javascript communication protocol 315 /// Encapsulates our simple javascript communication protocol
278 void ShowStatusMessage(const std::string& message) { 316 void ShowStatusMessage(const std::string& message) {
279 std::stringstream ss; 317 std::stringstream ss;
(...skipping 19 matching lines...) Expand all
299 }; 337 };
300 338
301 namespace pp { 339 namespace pp {
302 /// Factory function called by the browser when the module is first loaded. 340 /// Factory function called by the browser when the module is first loaded.
303 /// The browser keeps a singleton of this module. It calls the 341 /// The browser keeps a singleton of this module. It calls the
304 /// CreateInstance() method on the object you return to make instances. There 342 /// CreateInstance() method on the object you return to make instances. There
305 /// is one instance per <embed> tag on the page. This is the main binding 343 /// is one instance per <embed> tag on the page. This is the main binding
306 /// point for your NaCl module with the browser. 344 /// point for your NaCl module with the browser.
307 Module* CreateModule() { return new FileIoModule(); } 345 Module* CreateModule() { return new FileIoModule(); }
308 } // namespace pp 346 } // namespace pp
OLDNEW
« no previous file with comments | « native_client_sdk/src/examples/api/file_io/example.js ('k') | native_client_sdk/src/examples/api/file_io/index.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698