cc: Added inline to Tile::IsReadyToDraw
[chromium-blink-merge.git] / ppapi / native_client / src / trusted / plugin / local_temp_file.h
blob51d2095f1c9ecb17d92395e436c4e7dd34cafdd3
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
3 // found in the LICENSE file.
5 #ifndef NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_LOCAL_TEMP_FILE_H_
6 #define NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_LOCAL_TEMP_FILE_H_
8 #include "native_client/src/include/nacl_macros.h"
9 #include "native_client/src/include/nacl_string.h"
10 #include "native_client/src/trusted/desc/nacl_desc_rng.h"
11 #include "native_client/src/trusted/desc/nacl_desc_wrapper.h"
13 #include "ppapi/c/trusted/ppb_file_io_trusted.h"
14 #include "ppapi/utility/completion_callback_factory.h"
16 namespace pp {
17 class CompletionCallback;
18 class FileIO;
19 class FileRef;
20 class FileSystem;
23 namespace plugin {
25 class Plugin;
27 // Translation creates two temporary files. The first temporary file holds
28 // the object file created by llc. The second holds the nexe produced by
29 // the linker. Both of these temporary files are used to both write and
30 // read according to the following matrix:
32 // PnaclCoordinator::obj_file_:
33 // written by: llc (passed in explicitly through SRPC)
34 // read by: ld (returned via lookup service from SRPC)
35 // PnaclCoordinator::nexe_file_:
36 // written by: ld (passed in explicitly through SRPC)
37 // read by: sel_ldr (passed in explicitly to command channel)
40 // LocalTempFile represents a file used as a temporary between stages in
41 // translation. It is created in the local temporary file system of the page
42 // being processed. The name of the temporary file is a random 32-character
43 // hex string. Because both reading and writing are necessary, two I/O objects
44 // for the file are opened.
45 class LocalTempFile {
46 public:
47 // Create a LocalTempFile with a random name.
48 LocalTempFile(Plugin* plugin,
49 pp::FileSystem* file_system,
50 const nacl::string& base_dir);
51 // Create a LocalTempFile with a specific filename.
52 LocalTempFile(Plugin* plugin,
53 pp::FileSystem* file_system,
54 const nacl::string& base_dir,
55 const nacl::string& filename);
56 ~LocalTempFile();
57 // Opens a writeable file IO object and descriptor referring to the file.
58 void OpenWrite(const pp::CompletionCallback& cb);
59 // Opens a read only file IO object and descriptor referring to the file.
60 void OpenRead(const pp::CompletionCallback& cb);
61 // Closes the open descriptors.
62 void Close(const pp::CompletionCallback& cb);
63 // Deletes the temporary file.
64 void Delete(const pp::CompletionCallback& cb);
65 // Renames the temporary file.
66 void Rename(const nacl::string& new_name,
67 const pp::CompletionCallback& cb);
68 void FinishRename();
70 // Accessors.
71 // The nacl::DescWrapper* for the writeable version of the file.
72 nacl::DescWrapper* write_wrapper() { return write_wrapper_.get(); }
73 nacl::DescWrapper* release_write_wrapper() {
74 return write_wrapper_.release();
76 // The nacl::DescWrapper* for the read-only version of the file.
77 nacl::DescWrapper* read_wrapper() { return read_wrapper_.get(); }
78 nacl::DescWrapper* release_read_wrapper() {
79 return read_wrapper_.release();
81 // For quota management.
82 const nacl::string identifier() const {
83 return nacl::string(reinterpret_cast<const char*>(identifier_));
85 pp::FileIO* write_file_io() const { return write_io_.get(); }
87 private:
88 NACL_DISALLOW_COPY_AND_ASSIGN(LocalTempFile);
90 void Initialize();
92 // Gets the POSIX file descriptor for a resource.
93 int32_t GetFD(int32_t pp_error,
94 const pp::Resource& resource,
95 bool is_writable);
96 // Called when the writable file IO was opened.
97 void WriteFileDidOpen(int32_t pp_error);
98 // Called when the readable file IO was opened.
99 void ReadFileDidOpen(int32_t pp_error);
100 // Completes the close operation after quota update.
101 void CloseContinuation(int32_t pp_error);
103 Plugin* plugin_;
104 pp::FileSystem* file_system_;
105 const PPB_FileIOTrusted* file_io_trusted_;
106 pp::CompletionCallbackFactory<LocalTempFile> callback_factory_;
107 nacl::string base_dir_;
108 nacl::string filename_;
109 nacl::scoped_ptr<pp::FileRef> file_ref_;
110 // Temporarily holds the previous file ref during a rename operation.
111 nacl::scoped_ptr<pp::FileRef> old_ref_;
112 // The PPAPI and wrapper state for the writeable file.
113 nacl::scoped_ptr<pp::FileIO> write_io_;
114 nacl::scoped_ptr<nacl::DescWrapper> write_wrapper_;
115 // The PPAPI and wrapper state for the read-only file.
116 nacl::scoped_ptr<pp::FileIO> read_io_;
117 nacl::scoped_ptr<nacl::DescWrapper> read_wrapper_;
118 // The callback invoked when both file I/O objects are created.
119 pp::CompletionCallback done_callback_;
120 // Random number generator used to create filenames.
121 struct NaClDescRng *rng_desc_;
122 // An identifier string used for quota request processing. The quota
123 // interface needs a string that is unique per sel_ldr instance only, so
124 // the identifiers can be reused between runs of the translator, start-ups of
125 // the browser, etc.
126 uint8_t identifier_[16];
127 // A counter to dole out unique identifiers.
128 static uint32_t next_identifier;
131 } // namespace plugin
133 #endif // NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_LOCAL_TEMP_FILE_H_