OLD | NEW |
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 #include <fcntl.h> |
5 #include <pthread.h> | 6 #include <pthread.h> |
6 #include <stdio.h> | 7 #include <stdio.h> |
| 8 #include <sys/types.h> |
| 9 #include <sys/stat.h> |
7 | 10 |
8 #include <cstdlib> | 11 #include <cstdlib> |
9 #include <cstring> | 12 #include <cstring> |
10 #include <map> | 13 #include <map> |
11 #include <string> | 14 #include <string> |
12 #include <vector> | 15 #include <vector> |
13 | 16 |
| 17 #include "nacl_mounts/kernel_intercept.h" |
| 18 |
14 #include "ppapi/cpp/input_event.h" | 19 #include "ppapi/cpp/input_event.h" |
15 #include "ppapi/cpp/rect.h" | 20 #include "ppapi/cpp/rect.h" |
16 #include "ppapi/cpp/size.h" | 21 #include "ppapi/cpp/size.h" |
17 #include "ppapi/cpp/var.h" | 22 #include "ppapi/cpp/var.h" |
18 | 23 |
19 #include "ppapi_main/ppapi_instance.h" | 24 #include "ppapi_main/ppapi_instance.h" |
20 #include "ppapi_main/ppapi_main.h" | 25 #include "ppapi_main/ppapi_main.h" |
21 | 26 |
| 27 |
22 struct StartInfo { | 28 struct StartInfo { |
23 uint32_t argc_; | 29 uint32_t argc_; |
24 const char** argv_; | 30 const char** argv_; |
25 }; | 31 }; |
26 | 32 |
27 static void* StartMain(void *info) { | 33 static void* StartMain(void *info) { |
28 StartInfo* si = static_cast<StartInfo*>(info); | 34 StartInfo* si = static_cast<StartInfo*>(info); |
29 | 35 |
30 if (NULL != info) { | 36 if (NULL != info) { |
31 ppapi_main(si->argc_, si->argv_); | 37 ppapi_main(si->argc_, si->argv_); |
(...skipping 28 matching lines...) Expand all Loading... |
60 PPAPIInstance::~PPAPIInstance() { | 66 PPAPIInstance::~PPAPIInstance() { |
61 } | 67 } |
62 | 68 |
63 bool PPAPIInstance::Init(uint32_t arg, | 69 bool PPAPIInstance::Init(uint32_t arg, |
64 const char* argn[], | 70 const char* argn[], |
65 const char* argv[]) { | 71 const char* argv[]) { |
66 StartInfo* si = new StartInfo; | 72 StartInfo* si = new StartInfo; |
67 | 73 |
68 si->argc_ = 1; | 74 si->argc_ = 1; |
69 si->argv_ = new const char *[arg*2+1]; | 75 si->argv_ = new const char *[arg*2+1]; |
70 | 76 si->argv_[0] = NULL; |
71 char *name = new char[5]; | |
72 strcpy(name, "NEXE"); | |
73 si->argv_[0] = name; | |
74 | 77 |
75 for (uint32_t i=0; i < arg; i++) { | 78 for (uint32_t i=0; i < arg; i++) { |
76 // If we start with PM prefix set the instance argument map | 79 // If we start with PM prefix set the instance argument map |
77 if (0 == strncmp(argn[i], "PM_", 3)) { | 80 if (0 == strncmp(argn[i], "PM_", 3)) { |
78 std::string key = argn[i]; | 81 std::string key = argn[i]; |
79 std::string val = argv[i]; | 82 std::string val = argv[i]; |
80 properties_[key] = val; | 83 properties_[key] = val; |
| 84 continue; |
81 } | 85 } |
82 // Otherwise turn it into arguments | 86 |
| 87 // If this is the 'src' tag, then get the NMF name. |
| 88 if (!strcmp("src", argn[i])) { |
| 89 char *name = new char[strlen(argv[i]) + 1]; |
| 90 strcpy(name, argv[i]); |
| 91 si->argv_[0] = name; |
| 92 } |
83 else { | 93 else { |
| 94 // Otherwise turn it into arguments |
84 char *key = new char[strlen(argn[i]) + 3]; | 95 char *key = new char[strlen(argn[i]) + 3]; |
85 key[0] = '-'; | 96 key[0] = '-'; |
86 key[1] = '-'; | 97 key[1] = '-'; |
87 strcpy(&key[2], argn[i]); | 98 strcpy(&key[2], argn[i]); |
88 | 99 |
89 si->argv_[si->argc_++] = key; | 100 si->argv_[si->argc_++] = key; |
90 if (argv[i] && argv[i][0]) { | 101 if (argv[i] && argv[i][0]) { |
91 char *val = new char[strlen(argv[i]) + 1]; | 102 char *val = new char[strlen(argv[i]) + 1]; |
92 strcpy(val, argv[i]); | 103 strcpy(val, argv[i]); |
93 si->argv_[si->argc_++] = val; | 104 si->argv_[si->argc_++] = val; |
94 } | 105 } |
95 } | 106 } |
96 } | 107 } |
97 | 108 |
98 // ki_init(); | 109 // If src was not found, set the first arg to something |
| 110 if (NULL == si->argv_[0]) { |
| 111 char *name = new char[5]; |
| 112 strcpy(name, "NMF?"); |
| 113 si->argv_[0] = name; |
| 114 } |
99 | 115 |
100 if (ProcessProperties()) { | 116 if (ProcessProperties()) { |
101 pthread_t main_thread; | 117 pthread_t main_thread; |
102 int ret = pthread_create(&main_thread, NULL, StartMain, | 118 int ret = pthread_create(&main_thread, NULL, StartMain, |
103 static_cast<void*>(si)); | 119 static_cast<void*>(si)); |
104 return ret == 0; | 120 return ret == 0; |
105 } | 121 } |
106 | 122 |
107 return false; | 123 return false; |
108 } | 124 } |
109 | 125 |
110 const char* PPAPIInstance::GetProperty(const char* key, const char* def) { | 126 const char* PPAPIInstance::GetProperty(const char* key, const char* def) { |
111 PropteryMap_t::iterator it = properties_.find(key); | 127 PropteryMap_t::iterator it = properties_.find(key); |
112 if (it != properties_.end()) { | 128 if (it != properties_.end()) { |
113 return it->second.c_str(); | 129 return it->second.c_str(); |
114 } | 130 } |
115 return def; | 131 return def; |
116 } | 132 } |
117 | 133 |
118 bool PPAPIInstance::ProcessProperties() { | 134 bool PPAPIInstance::ProcessProperties() { |
119 #if 0 | 135 const char* stdin_path = GetProperty("PM_STDIO", "/dev/null"); |
120 const char* stdin_path = GetProperty("PM_STDIO", "/dev/tty"); | 136 const char* stdout_path = GetProperty("PM_STDOUT", "/dev/tty"); |
121 const char* stdout_path = GetProperty("PM_STDOUT", "/dev/console0"); | |
122 const char* stderr_path = GetProperty("PM_STDERR", "/dev/console3"); | 137 const char* stderr_path = GetProperty("PM_STDERR", "/dev/console3"); |
123 #endif | 138 |
| 139 ki_init_ppapi(NULL, PPAPI_GetInstanceId(), PPAPI_GetInterface); |
| 140 int f1 = open(stdin_path, O_RDONLY); |
| 141 int f2 = open(stdout_path, O_WRONLY); |
| 142 int f3 = open(stderr_path, O_WRONLY); |
| 143 |
| 144 return true; |
124 } | 145 } |
125 | 146 |
126 void PPAPIInstance::HandleMessage(const pp::Var& message) { | 147 void PPAPIInstance::HandleMessage(const pp::Var& message) { |
127 } | 148 } |
128 | 149 |
129 | 150 |
130 bool PPAPIInstance::HandleInputEvent(const pp::InputEvent& event) { | 151 bool PPAPIInstance::HandleInputEvent(const pp::InputEvent& event) { |
131 switch (event.GetType()) { | 152 switch (event.GetType()) { |
132 case PP_INPUTEVENT_TYPE_UNDEFINED: | 153 case PP_INPUTEVENT_TYPE_UNDEFINED: |
133 break; | 154 break; |
(...skipping 26 matching lines...) Expand all Loading... |
160 } | 181 } |
161 return false; | 182 return false; |
162 } | 183 } |
163 | 184 |
164 void PPAPIInstance::DidChangeView(const pp::View&) { | 185 void PPAPIInstance::DidChangeView(const pp::View&) { |
165 } | 186 } |
166 | 187 |
167 void PPAPIInstance::DidChangeFocus(bool focus) { | 188 void PPAPIInstance::DidChangeFocus(bool focus) { |
168 has_focus_ = focus; | 189 has_focus_ = focus; |
169 } | 190 } |
OLD | NEW |