OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "chrome/browser/plugin_process_host.h" | 5 #include "chrome/browser/plugin_process_host.h" |
6 | 6 |
7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
8 #include <windows.h> | 8 #include <windows.h> |
9 #elif defined(OS_POSIX) | 9 #elif defined(OS_POSIX) |
10 #include <utility> // for pair<> | 10 #include <utility> // for pair<> |
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
356 browser_command_line.GetSwitchValue(switches::kPluginLauncher); | 356 browser_command_line.GetSwitchValue(switches::kPluginLauncher); |
357 FilePath exe_path = GetChildPath(plugin_launcher.empty()); | 357 FilePath exe_path = GetChildPath(plugin_launcher.empty()); |
358 if (exe_path.empty()) | 358 if (exe_path.empty()) |
359 return false; | 359 return false; |
360 | 360 |
361 CommandLine* cmd_line = new CommandLine(exe_path); | 361 CommandLine* cmd_line = new CommandLine(exe_path); |
362 // Put the process type and plugin path first so they're easier to see | 362 // Put the process type and plugin path first so they're easier to see |
363 // in process listings using native process management tools. | 363 // in process listings using native process management tools. |
364 cmd_line->AppendSwitchWithValue(switches::kProcessType, | 364 cmd_line->AppendSwitchWithValue(switches::kProcessType, |
365 switches::kPluginProcess); | 365 switches::kPluginProcess); |
366 cmd_line->AppendSwitchWithValue(switches::kPluginPath, | 366 cmd_line->AppendSwitchPath(switches::kPluginPath, info.path); |
367 info.path.ToWStringHack()); | |
368 | 367 |
369 if (logging::DialogsAreSuppressed()) | 368 if (logging::DialogsAreSuppressed()) |
370 cmd_line->AppendSwitch(switches::kNoErrorDialogs); | 369 cmd_line->AppendSwitch(switches::kNoErrorDialogs); |
371 | 370 |
372 // Propagate the following switches to the plugin command line (along with | 371 // Propagate the following switches to the plugin command line (along with |
373 // any associated values) if present in the browser command line | 372 // any associated values) if present in the browser command line |
374 static const char* const switch_names[] = { | 373 static const char* const kSwitchNames[] = { |
375 switches::kPluginStartupDialog, | 374 switches::kPluginStartupDialog, |
376 switches::kNoSandbox, | 375 switches::kNoSandbox, |
377 switches::kSafePlugins, | 376 switches::kSafePlugins, |
378 switches::kTestSandbox, | 377 switches::kTestSandbox, |
379 switches::kUserAgent, | 378 switches::kUserAgent, |
380 switches::kDisableBreakpad, | 379 switches::kDisableBreakpad, |
381 switches::kFullMemoryCrashReport, | 380 switches::kFullMemoryCrashReport, |
382 switches::kEnableLogging, | 381 switches::kEnableLogging, |
383 switches::kDisableLogging, | 382 switches::kDisableLogging, |
384 switches::kLoggingLevel, | 383 switches::kLoggingLevel, |
385 switches::kLogPluginMessages, | 384 switches::kLogPluginMessages, |
386 switches::kUserDataDir, | 385 switches::kUserDataDir, |
387 switches::kEnableDCHECK, | 386 switches::kEnableDCHECK, |
388 switches::kSilentDumpOnDCHECK, | 387 switches::kSilentDumpOnDCHECK, |
389 switches::kMemoryProfiling, | 388 switches::kMemoryProfiling, |
390 switches::kUseLowFragHeapCrt, | 389 switches::kUseLowFragHeapCrt, |
391 switches::kEnableStatsTable, | 390 switches::kEnableStatsTable, |
392 switches::kEnableGPUPlugin, | 391 switches::kEnableGPUPlugin, |
393 switches::kUseGL, | 392 switches::kUseGL, |
394 #if defined(OS_CHROMEOS) | 393 #if defined(OS_CHROMEOS) |
395 switches::kProfile, | 394 switches::kProfile, |
396 #endif | 395 #endif |
397 }; | 396 }; |
398 | 397 |
399 for (size_t i = 0; i < arraysize(switch_names); ++i) { | 398 cmd_line->CopySwitchesFrom(browser_command_line, kSwitchNames, |
400 if (browser_command_line.HasSwitch(switch_names[i])) { | 399 arraysize(kSwitchNames)); |
401 cmd_line->AppendSwitchWithValue( | |
402 switch_names[i], | |
403 browser_command_line.GetSwitchValueASCII(switch_names[i])); | |
404 } | |
405 } | |
406 | 400 |
407 // If specified, prepend a launcher program to the command line. | 401 // If specified, prepend a launcher program to the command line. |
408 if (!plugin_launcher.empty()) | 402 if (!plugin_launcher.empty()) |
409 cmd_line->PrependWrapper(plugin_launcher); | 403 cmd_line->PrependWrapper(plugin_launcher); |
410 | 404 |
411 if (!locale.empty()) { | 405 if (!locale.empty()) { |
412 // Pass on the locale so the null plugin will use the right language in the | 406 // Pass on the locale so the null plugin will use the right language in the |
413 // prompt to install the desired plugin. | 407 // prompt to install the desired plugin. |
414 cmd_line->AppendSwitchWithValue(switches::kLang, locale); | 408 cmd_line->AppendSwitchWithValue(switches::kLang, locale); |
415 } | 409 } |
416 | 410 |
417 // Gears requires the data dir to be available on startup. | 411 // Gears requires the data dir to be available on startup. |
418 std::wstring data_dir = | 412 FilePath data_dir = |
419 PluginService::GetInstance()->GetChromePluginDataDir().ToWStringHack(); | 413 PluginService::GetInstance()->GetChromePluginDataDir(); |
420 DCHECK(!data_dir.empty()); | 414 DCHECK(!data_dir.empty()); |
421 cmd_line->AppendSwitchWithValue(switches::kPluginDataDir, data_dir); | 415 cmd_line->AppendSwitchPath(switches::kPluginDataDir, data_dir); |
422 | 416 |
423 cmd_line->AppendSwitchWithValue(switches::kProcessChannelID, | 417 cmd_line->AppendSwitchWithValue(switches::kProcessChannelID, channel_id()); |
424 ASCIIToWide(channel_id())); | |
425 | 418 |
426 SetCrashReporterCommandLine(cmd_line); | 419 SetCrashReporterCommandLine(cmd_line); |
427 | 420 |
428 #if defined(OS_POSIX) | 421 #if defined(OS_POSIX) |
429 base::environment_vector env; | 422 base::environment_vector env; |
430 #if defined(OS_MACOSX) && !defined(__LP64__) | 423 #if defined(OS_MACOSX) && !defined(__LP64__) |
431 // Add our interposing library for Carbon. This is stripped back out in | 424 // Add our interposing library for Carbon. This is stripped back out in |
432 // plugin_main.cc, so changes here should be reflected there. | 425 // plugin_main.cc, so changes here should be reflected there. |
433 std::string interpose_list(plugin_interpose_strings::kInterposeLibraryPath); | 426 std::string interpose_list(plugin_interpose_strings::kInterposeLibraryPath); |
434 const char* existing_list = | 427 const char* existing_list = |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
668 const std::vector<uint8>& data) { | 661 const std::vector<uint8>& data) { |
669 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO)); | 662 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO)); |
670 | 663 |
671 ChromePluginLib *chrome_plugin = ChromePluginLib::Find(info_.path); | 664 ChromePluginLib *chrome_plugin = ChromePluginLib::Find(info_.path); |
672 if (chrome_plugin) { | 665 if (chrome_plugin) { |
673 void *data_ptr = const_cast<void*>(reinterpret_cast<const void*>(&data[0])); | 666 void *data_ptr = const_cast<void*>(reinterpret_cast<const void*>(&data[0])); |
674 uint32 data_len = static_cast<uint32>(data.size()); | 667 uint32 data_len = static_cast<uint32>(data.size()); |
675 chrome_plugin->functions().on_message(data_ptr, data_len); | 668 chrome_plugin->functions().on_message(data_ptr, data_len); |
676 } | 669 } |
677 } | 670 } |
OLD | NEW |