Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(241)

Side by Side Diff: chrome/browser/plugin_process_host.cc

Issue 18248: CommandLine API rework (Closed)
Patch Set: fixes Created 11 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 #include <windows.h> 7 #include <windows.h>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 this)); 454 this));
455 if (!channel_->Connect()) 455 if (!channel_->Connect())
456 return false; 456 return false;
457 457
458 // build command line for plugin, we have to quote the plugin's path to deal 458 // build command line for plugin, we have to quote the plugin's path to deal
459 // with spaces. 459 // with spaces.
460 std::wstring exe_path; 460 std::wstring exe_path;
461 if (!PathService::Get(base::FILE_EXE, &exe_path)) 461 if (!PathService::Get(base::FILE_EXE, &exe_path))
462 return false; 462 return false;
463 463
464 std::wstring cmd_line(L"\""); 464 CommandLine cmd_line(exe_path);
465 cmd_line += exe_path;
466 cmd_line += L"\"";
467 if (logging::DialogsAreSuppressed()) 465 if (logging::DialogsAreSuppressed())
468 CommandLine::AppendSwitch(&cmd_line, switches::kNoErrorDialogs); 466 cmd_line.AppendSwitch(switches::kNoErrorDialogs);
469 467
470 CommandLine browser_command_line; 468 const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess();
471 469
472 // propagate the following switches to the plugin command line (along with 470 // propagate the following switches to the plugin command line (along with
473 // any associated values) if present in the browser command line 471 // any associated values) if present in the browser command line
474 static const wchar_t* const switch_names[] = { 472 static const wchar_t* const switch_names[] = {
475 switches::kPluginStartupDialog, 473 switches::kPluginStartupDialog,
476 switches::kNoSandbox, 474 switches::kNoSandbox,
477 switches::kSafePlugins, 475 switches::kSafePlugins,
478 switches::kTestSandbox, 476 switches::kTestSandbox,
479 switches::kUserAgent, 477 switches::kUserAgent,
480 switches::kDisableBreakpad, 478 switches::kDisableBreakpad,
481 switches::kFullMemoryCrashReport, 479 switches::kFullMemoryCrashReport,
482 switches::kEnableLogging, 480 switches::kEnableLogging,
483 switches::kDisableLogging, 481 switches::kDisableLogging,
484 switches::kLoggingLevel, 482 switches::kLoggingLevel,
485 switches::kUserDataDir, 483 switches::kUserDataDir,
486 switches::kAllowAllActiveX, 484 switches::kAllowAllActiveX,
487 switches::kEnableDCHECK, 485 switches::kEnableDCHECK,
488 switches::kSilentDumpOnDCHECK, 486 switches::kSilentDumpOnDCHECK,
489 switches::kMemoryProfiling, 487 switches::kMemoryProfiling,
490 switches::kUseLowFragHeapCrt, 488 switches::kUseLowFragHeapCrt,
491 }; 489 };
492 490
493 for (int i = 0; i < arraysize(switch_names); ++i) { 491 for (int i = 0; i < arraysize(switch_names); ++i) {
494 if (browser_command_line.HasSwitch(switch_names[i])) { 492 if (browser_command_line.HasSwitch(switch_names[i])) {
495 CommandLine::AppendSwitchWithValue( 493 cmd_line.AppendSwitchWithValue(
496 &cmd_line, switch_names[i], 494 switch_names[i],
497 browser_command_line.GetSwitchValue(switch_names[i])); 495 browser_command_line.GetSwitchValue(switch_names[i]));
498 } 496 }
499 } 497 }
500 498
501 // If specified, prepend a launcher program to the command line. 499 // If specified, prepend a launcher program to the command line.
502 std::wstring plugin_launcher = 500 std::wstring plugin_launcher =
503 browser_command_line.GetSwitchValue(switches::kPluginLauncher); 501 browser_command_line.GetSwitchValue(switches::kPluginLauncher);
504 if (!plugin_launcher.empty()) 502 if (!plugin_launcher.empty()) {
505 cmd_line = plugin_launcher + L" " + cmd_line; 503 CommandLine new_cmd_line = CommandLine(plugin_launcher);
504 new_cmd_line.AppendArguments(cmd_line, true);
505 cmd_line = new_cmd_line;
506 }
506 507
507 if (!locale.empty()) { 508 if (!locale.empty()) {
508 // Pass on the locale so the null plugin will use the right language in the 509 // Pass on the locale so the null plugin will use the right language in the
509 // prompt to install the desired plugin. 510 // prompt to install the desired plugin.
510 CommandLine::AppendSwitchWithValue(&cmd_line, switches::kLang, locale); 511 cmd_line.AppendSwitchWithValue(switches::kLang, locale);
511 } 512 }
512 513
513 CommandLine::AppendSwitchWithValue(&cmd_line, 514 cmd_line.AppendSwitchWithValue(switches::kProcessType,
514 switches::kProcessType, 515 switches::kPluginProcess);
515 switches::kPluginProcess);
516 516
517 CommandLine::AppendSwitchWithValue(&cmd_line, 517 cmd_line.AppendSwitchWithValue(switches::kProcessChannelID,
518 switches::kProcessChannelID, 518 channel_id_);
519 channel_id_);
520 519
521 CommandLine::AppendSwitchWithValue(&cmd_line, 520 cmd_line.AppendSwitchWithValue(switches::kPluginPath,
522 switches::kPluginPath, 521 plugin_path.ToWStringHack());
523 plugin_path.ToWStringHack());
524 522
525 bool in_sandbox = !browser_command_line.HasSwitch(switches::kNoSandbox) && 523 bool in_sandbox = !browser_command_line.HasSwitch(switches::kNoSandbox) &&
526 browser_command_line.HasSwitch(switches::kSafePlugins); 524 browser_command_line.HasSwitch(switches::kSafePlugins);
527 525
528 bool child_needs_help = 526 bool child_needs_help =
529 DebugFlags::ProcessDebugFlags(&cmd_line, DebugFlags::PLUGIN, in_sandbox); 527 DebugFlags::ProcessDebugFlags(&cmd_line, DebugFlags::PLUGIN, in_sandbox);
530 528
531 if (in_sandbox) { 529 if (in_sandbox) {
532 // spawn the child process in the sandbox 530 // spawn the child process in the sandbox
533 sandbox::BrokerServices* broker_service = 531 sandbox::BrokerServices* broker_service =
534 g_browser_process->broker_services(); 532 g_browser_process->broker_services();
535 533
536 sandbox::ResultCode result; 534 sandbox::ResultCode result;
537 PROCESS_INFORMATION target = {0}; 535 PROCESS_INFORMATION target = {0};
538 sandbox::TargetPolicy* policy = broker_service->CreatePolicy(); 536 sandbox::TargetPolicy* policy = broker_service->CreatePolicy();
539 537
540 std::wstring trusted_plugins = 538 std::wstring trusted_plugins =
541 browser_command_line.GetSwitchValue(switches::kTrustedPlugins); 539 browser_command_line.GetSwitchValue(switches::kTrustedPlugins);
542 if (!AddPolicyForPlugin(plugin_path, activex_clsid, trusted_plugins, 540 if (!AddPolicyForPlugin(plugin_path, activex_clsid, trusted_plugins,
543 policy)) { 541 policy)) {
544 NOTREACHED(); 542 NOTREACHED();
545 return false; 543 return false;
546 } 544 }
547 545
548 if (!AddGenericPolicy(policy)) { 546 if (!AddGenericPolicy(policy)) {
549 NOTREACHED(); 547 NOTREACHED();
550 return false; 548 return false;
551 } 549 }
552 550
553 result = broker_service->SpawnTarget(exe_path.c_str(), 551 result =
554 cmd_line.c_str(), policy, &target); 552 broker_service->SpawnTarget(exe_path.c_str(),
553 cmd_line.command_line_string().c_str(),
554 policy, &target);
555 policy->Release(); 555 policy->Release();
556 if (sandbox::SBOX_ALL_OK != result) 556 if (sandbox::SBOX_ALL_OK != result)
557 return false; 557 return false;
558 558
559 ResumeThread(target.hThread); 559 ResumeThread(target.hThread);
560 CloseHandle(target.hThread); 560 CloseHandle(target.hThread);
561 process_.set_handle(target.hProcess); 561 process_.set_handle(target.hProcess);
562 562
563 // Help the process a little. It can't start the debugger by itself if 563 // Help the process a little. It can't start the debugger by itself if
564 // the process is in a sandbox. 564 // the process is in a sandbox.
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
931 void PluginProcessHost::OnDestroyWindow(HWND window) { 931 void PluginProcessHost::OnDestroyWindow(HWND window) {
932 plugin_service_->main_message_loop()->PostTask(FROM_HERE, 932 plugin_service_->main_message_loop()->PostTask(FROM_HERE,
933 new DestroyWindowTask(window)); 933 new DestroyWindowTask(window));
934 } 934 }
935 935
936 void PluginProcessHost::Shutdown() { 936 void PluginProcessHost::Shutdown() {
937 937
938 Send(new PluginProcessMsg_BrowserShutdown); 938 Send(new PluginProcessMsg_BrowserShutdown);
939 } 939 }
940 940
OLDNEW
« no previous file with comments | « chrome/browser/net/chrome_url_request_context.cc ('k') | chrome/browser/printing/printing_layout_uitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698