OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "components/nacl/renderer/ppb_nacl_private_impl.h" | 5 #include "components/nacl/renderer/ppb_nacl_private_impl.h" |
6 | 6 |
7 #include <numeric> | 7 #include <numeric> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 1096 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1107 base::PlatformFile file = GetReadonlyPnaclFD(filename); | 1107 base::PlatformFile file = GetReadonlyPnaclFD(filename); |
1108 if (file == base::kInvalidPlatformFileValue) { | 1108 if (file == base::kInvalidPlatformFileValue) { |
1109 load_manager->ReportLoadError( | 1109 load_manager->ReportLoadError( |
1110 PP_NACL_ERROR_PNACL_RESOURCE_FETCH, | 1110 PP_NACL_ERROR_PNACL_RESOURCE_FETCH, |
1111 "The Portable Native Client (pnacl) component is not " | 1111 "The Portable Native Client (pnacl) component is not " |
1112 "installed. Please consult chrome://components for more " | 1112 "installed. Please consult chrome://components for more " |
1113 "information."); | 1113 "information."); |
1114 return PP_FALSE; | 1114 return PP_FALSE; |
1115 } | 1115 } |
1116 | 1116 |
1117 base::PlatformFileInfo file_info; | 1117 const int kBufferSize = 1 << 20; |
1118 if (!GetPlatformFileInfo(file, &file_info)) { | 1118 scoped_ptr<char[]> buffer(new char[kBufferSize]); |
| 1119 if (base::ReadPlatformFile(file, 0, buffer.get(), kBufferSize) < 0) { |
1119 load_manager->ReportLoadError( | 1120 load_manager->ReportLoadError( |
1120 PP_NACL_ERROR_PNACL_RESOURCE_FETCH, | 1121 PP_NACL_ERROR_PNACL_RESOURCE_FETCH, |
1121 std::string("GetPNaClResourceInfo, GetFileInfo failed for: ") + | 1122 std::string("PnaclResources::ReadResourceInfo reading failed for: ") + |
1122 filename); | 1123 filename); |
1123 return PP_FALSE; | 1124 return PP_FALSE; |
1124 } | 1125 } |
1125 | 1126 |
1126 if (file_info.size > 1 << 20) { | |
1127 load_manager->ReportLoadError( | |
1128 PP_NACL_ERROR_PNACL_RESOURCE_FETCH, | |
1129 std::string("GetPNaClResourceInfo, file too large: ") + filename); | |
1130 return PP_FALSE; | |
1131 } | |
1132 | |
1133 scoped_ptr<char[]> buffer(new char[file_info.size]); | |
1134 if (buffer.get() == NULL) { | |
1135 load_manager->ReportLoadError( | |
1136 PP_NACL_ERROR_PNACL_RESOURCE_FETCH, | |
1137 std::string("GetPNaClResourceInfo, couldn't allocate for: ") + | |
1138 filename); | |
1139 return PP_FALSE; | |
1140 } | |
1141 | |
1142 if (base::ReadPlatformFile(file, 0, buffer.get(), file_info.size) < 0) { | |
1143 load_manager->ReportLoadError( | |
1144 PP_NACL_ERROR_PNACL_RESOURCE_FETCH, | |
1145 std::string("GetPNaClResourceInfo, reading failed for: ") + filename); | |
1146 return PP_FALSE; | |
1147 } | |
1148 | |
1149 // Expect the JSON file to contain a top-level object (dictionary). | 1127 // Expect the JSON file to contain a top-level object (dictionary). |
1150 Json::Reader json_reader; | 1128 Json::Reader json_reader; |
1151 Json::Value json_data; | 1129 Json::Value json_data; |
1152 if (!json_reader.parse(buffer.get(), json_data)) { | 1130 if (!json_reader.parse(buffer.get(), json_data)) { |
1153 load_manager->ReportLoadError( | 1131 load_manager->ReportLoadError( |
1154 PP_NACL_ERROR_PNACL_RESOURCE_FETCH, | 1132 PP_NACL_ERROR_PNACL_RESOURCE_FETCH, |
1155 std::string("Parsing resource info failed: JSON parse error: ") + | 1133 std::string("Parsing resource info failed: JSON parse error: ") + |
1156 json_reader.getFormattedErrorMessages()); | 1134 json_reader.getFormattedErrorMessages()); |
1157 return PP_FALSE; | 1135 return PP_FALSE; |
1158 } | 1136 } |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1301 &PostMessageToJavaScript | 1279 &PostMessageToJavaScript |
1302 }; | 1280 }; |
1303 | 1281 |
1304 } // namespace | 1282 } // namespace |
1305 | 1283 |
1306 const PPB_NaCl_Private* GetNaClPrivateInterface() { | 1284 const PPB_NaCl_Private* GetNaClPrivateInterface() { |
1307 return &nacl_interface; | 1285 return &nacl_interface; |
1308 } | 1286 } |
1309 | 1287 |
1310 } // namespace nacl | 1288 } // namespace nacl |
OLD | NEW |