| Index: ppapi/native_client/src/trusted/plugin/plugin.cc
|
| diff --git a/ppapi/native_client/src/trusted/plugin/plugin.cc b/ppapi/native_client/src/trusted/plugin/plugin.cc
|
| index 4eac81bc3dc43d830d6d93e91633b1e2c18828b3..04598a655fa4ba3c6a94856a37cc9a647c823cbe 100644
|
| --- a/ppapi/native_client/src/trusted/plugin/plugin.cc
|
| +++ b/ppapi/native_client/src/trusted/plugin/plugin.cc
|
| @@ -118,24 +118,11 @@ bool Plugin::EarlyInit(int argc, const char* argn[], const char* argv[]) {
|
| pp::TextInputController(this).SetTextInputType(PP_TEXTINPUT_TYPE_NONE);
|
| #endif
|
|
|
| - // Remember the embed/object argn/argv pairs.
|
| - argn_ = new char*[argc];
|
| - argv_ = new char*[argc];
|
| - argc_ = 0;
|
| for (int i = 0; i < argc; ++i) {
|
| - if (NULL != argn_ && NULL != argv_) {
|
| - argn_[argc_] = strdup(argn[i]);
|
| - argv_[argc_] = strdup(argv[i]);
|
| - if (NULL == argn_[argc_] || NULL == argv_[argc_]) {
|
| - // Give up on passing arguments.
|
| - free(argn_[argc_]);
|
| - free(argv_[argc_]);
|
| - continue;
|
| - }
|
| - ++argc_;
|
| - }
|
| + std::string name(argn[i]);
|
| + std::string value(argv[i]);
|
| + args_[name] = value;
|
| }
|
| - // TODO(sehr): this leaks strings if there is a subsequent failure.
|
|
|
| // Set up the factory used to produce DescWrappers.
|
| wrapper_factory_ = new nacl::DescWrapperFactory();
|
| @@ -497,14 +484,11 @@ NaClSubprocess* Plugin::LoadHelperNaClModule(nacl::DescWrapper* wrapper,
|
| return nacl_subprocess.release();
|
| }
|
|
|
| -char* Plugin::LookupArgument(const char* key) {
|
| - char** keys = argn_;
|
| - for (int ii = 0, len = argc_; ii < len; ++ii) {
|
| - if (!strcmp(keys[ii], key)) {
|
| - return argv_[ii];
|
| - }
|
| - }
|
| - return NULL;
|
| +std::string Plugin::LookupArgument(const std::string& key) const {
|
| + std::map<std::string, std::string>::const_iterator it = args_.find(key);
|
| + if (it != args_.end())
|
| + return it->second;
|
| + return std::string();
|
| }
|
|
|
| const char* const Plugin::kNaClMIMEType = "application/x-nacl";
|
| @@ -547,17 +531,13 @@ bool Plugin::Init(uint32_t argc, const char* argn[], const char* argv[]) {
|
| if (status) {
|
| // Look for the developer attribute; if it's present, enable 'dev'
|
| // interfaces.
|
| - const char* dev_settings = LookupArgument(kDevAttribute);
|
| - enable_dev_interfaces_ = (dev_settings != NULL);
|
| -
|
| - const char* type_attr = LookupArgument(kTypeAttribute);
|
| - if (type_attr != NULL) {
|
| - mime_type_ = nacl::string(type_attr);
|
| - std::transform(mime_type_.begin(), mime_type_.end(), mime_type_.begin(),
|
| - tolower);
|
| - }
|
| + enable_dev_interfaces_ = args_.find(kDevAttribute) != args_.end();
|
| +
|
| + mime_type_ = LookupArgument(kTypeAttribute);
|
| + std::transform(mime_type_.begin(), mime_type_.end(), mime_type_.begin(),
|
| + tolower);
|
|
|
| - const char* manifest_url = LookupArgument(kSrcManifestAttribute);
|
| + std::string manifest_url;
|
| if (NexeIsContentHandler()) {
|
| // For content handlers 'src' will be the URL for the content
|
| // and 'nacl' will be the URL for the manifest.
|
| @@ -565,6 +545,8 @@ bool Plugin::Init(uint32_t argc, const char* argn[], const char* argv[]) {
|
| // For content handlers the NEXE runs in the security context of the
|
| // content it is rendering and the NEXE itself appears to be a
|
| // cross-origin resource stored in a Chrome extension.
|
| + } else {
|
| + manifest_url = LookupArgument(kSrcManifestAttribute);
|
| }
|
| // Use the document URL as the base for resolving relative URLs to find the
|
| // manifest. This takes into account the setting of <base> tags that
|
| @@ -576,12 +558,12 @@ bool Plugin::Init(uint32_t argc, const char* argn[], const char* argv[]) {
|
| return false;
|
| }
|
| set_plugin_base_url(base_var.AsString());
|
| - if (manifest_url == NULL) {
|
| + if (manifest_url.empty()) {
|
| // TODO(sehr,polina): this should be a hard error when scripting
|
| // the src property is no longer allowed.
|
| PLUGIN_PRINTF(("Plugin::Init:"
|
| " WARNING: no 'src' property, so no manifest loaded.\n"));
|
| - if (NULL != LookupArgument(kNaClManifestAttribute)) {
|
| + if (args_.find(kNaClManifestAttribute) != args_.end()) {
|
| PLUGIN_PRINTF(("Plugin::Init:"
|
| " WARNING: 'nacl' property is incorrect. Use 'src'.\n"));
|
| }
|
| @@ -589,7 +571,7 @@ bool Plugin::Init(uint32_t argc, const char* argn[], const char* argv[]) {
|
| // Issue a GET for the manifest_url. The manifest file will be parsed to
|
| // determine the nexe URL.
|
| // Sets src property to full manifest URL.
|
| - RequestNaClManifest(manifest_url);
|
| + RequestNaClManifest(manifest_url.c_str());
|
| }
|
| }
|
|
|
| @@ -599,9 +581,6 @@ bool Plugin::Init(uint32_t argc, const char* argn[], const char* argv[]) {
|
|
|
| Plugin::Plugin(PP_Instance pp_instance)
|
| : pp::Instance(pp_instance),
|
| - argc_(-1),
|
| - argn_(NULL),
|
| - argv_(NULL),
|
| main_subprocess_("main subprocess", NULL, NULL),
|
| nexe_error_reported_(false),
|
| wrapper_factory_(NULL),
|
| @@ -677,8 +656,6 @@ Plugin::~Plugin() {
|
| ShutDownSubprocesses();
|
|
|
| delete wrapper_factory_;
|
| - delete[] argv_;
|
| - delete[] argn_;
|
|
|
| HistogramTimeSmall(
|
| "NaCl.Perf.ShutdownTime.Total",
|
|
|