OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 // Represents the browser side of the browser <--> renderer communication | 5 // Represents the browser side of the browser <--> renderer communication |
6 // channel. There will be one RenderProcessHost per renderer process. | 6 // channel. There will be one RenderProcessHost per renderer process. |
7 | 7 |
8 #include "chrome/browser/renderer_host/browser_render_process_host.h" | 8 #include "chrome/browser/renderer_host/browser_render_process_host.h" |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
628 command_line->AppendSwitch(switches::kDisable3DAPIs); | 628 command_line->AppendSwitch(switches::kDisable3DAPIs); |
629 } | 629 } |
630 } | 630 } |
631 | 631 |
632 void BrowserRenderProcessHost::PropagateBrowserCommandLineToRenderer( | 632 void BrowserRenderProcessHost::PropagateBrowserCommandLineToRenderer( |
633 const CommandLine& browser_cmd, | 633 const CommandLine& browser_cmd, |
634 CommandLine* renderer_cmd) const { | 634 CommandLine* renderer_cmd) const { |
635 // Propagate the following switches to the renderer command line (along | 635 // Propagate the following switches to the renderer command line (along |
636 // with any associated values) if present in the browser command line. | 636 // with any associated values) if present in the browser command line. |
637 static const char* const kSwitchNames[] = { | 637 static const char* const kSwitchNames[] = { |
| 638 switches::kAllowOutdatedPlugins, |
| 639 switches::kAllowScriptingGallery, |
| 640 switches::kAppsGalleryURL, |
| 641 // We propagate the Chrome Frame command line here as well in case the |
| 642 // renderer is not run in the sandbox. |
| 643 switches::kChromeFrame, |
| 644 switches::kDebugPrint, |
| 645 switches::kDisable3DAPIs, |
| 646 switches::kDisableAcceleratedCompositing, |
| 647 switches::kDisableApplicationCache, |
| 648 switches::kDisableAudio, |
| 649 switches::kDisableBreakpad, |
| 650 switches::kDisableDatabases, |
| 651 switches::kDisableDesktopNotifications, |
| 652 switches::kDisableDeviceOrientation, |
| 653 // We need to propagate this flag to determine whether to make the |
| 654 // WebGLArray constructors on the DOMWindow visible. This |
| 655 // information is needed very early during bringup. We prefer to |
| 656 // use the WebPreferences to set this flag on a page-by-page basis. |
| 657 switches::kDisableExperimentalWebGL, |
| 658 switches::kDisableFileSystem, |
| 659 switches::kDisableGeolocation, |
| 660 switches::kDisableGLSLTranslator, |
| 661 switches::kDisableIndexedDatabase, |
| 662 switches::kDisableLocalStorage, |
| 663 switches::kDisableLogging, |
| 664 switches::kDisableSeccompSandbox, |
| 665 switches::kDisableSessionStorage, |
| 666 switches::kDisableSharedWorkers, |
| 667 switches::kDisableSpeechInput, |
| 668 switches::kDisableWebSockets, |
| 669 switches::kDomAutomationController, |
| 670 switches::kDumpHistogramsOnExit, |
| 671 switches::kEnableAcceleratedDecoding, |
| 672 switches::kEnableBenchmarking, |
| 673 switches::kEnableClickToPlay, |
| 674 switches::kEnableCrxlessWebApps, |
| 675 switches::kEnableDCHECK, |
| 676 switches::kEnableExperimentalExtensionApis, |
| 677 switches::kEnableInBrowserThumbnailing, |
| 678 switches::kEnableLogging, |
| 679 switches::kEnableNaCl, |
| 680 switches::kEnableOpenMax, |
| 681 switches::kEnablePepperTesting, |
| 682 switches::kEnablePrintPreview, |
| 683 switches::kEnableRemoting, |
| 684 switches::kEnableResourceContentSettings, |
| 685 #if defined(OS_MACOSX) |
| 686 // Allow this to be set when invoking the browser and relayed along. |
| 687 switches::kEnableSandboxLogging, |
| 688 #endif |
| 689 switches::kEnableSearchProviderApiV2, |
| 690 switches::kEnableSeccompSandbox, |
| 691 switches::kEnableStatsTable, |
| 692 switches::kEnableTouch, |
| 693 switches::kEnableVideoFullscreen, |
| 694 switches::kEnableVideoLogging, |
| 695 switches::kEnableWatchdog, |
| 696 switches::kEnableWebAudio, |
| 697 switches::kExperimentalSpellcheckerFeatures, |
| 698 switches::kFullMemoryCrashReport, |
| 699 #if !defined (GOOGLE_CHROME_BUILD) |
| 700 // These are unsupported and not fully tested modes, so don't enable them |
| 701 // for official Google Chrome builds. |
| 702 switches::kInProcessPlugins, |
| 703 #endif // GOOGLE_CHROME_BUILD |
| 704 switches::kInProcessWebGL, |
| 705 switches::kInternalNaCl, |
| 706 switches::kInternalPepper, |
| 707 switches::kJavaScriptFlags, |
| 708 switches::kLoggingLevel, |
| 709 switches::kMemoryProfiling, |
| 710 switches::kMessageLoopHistogrammer, |
| 711 switches::kNewChromeUISecurityModel, |
| 712 switches::kNoJsRandomness, |
| 713 switches::kNoReferrers, |
| 714 switches::kNoSandbox, |
| 715 switches::kPlaybackMode, |
| 716 switches::kPpapiOutOfProcess, |
| 717 switches::kRecordMode, |
| 718 switches::kRegisterPepperPlugins, |
| 719 switches::kRemoteShellPort, |
638 switches::kRendererAssertTest, | 720 switches::kRendererAssertTest, |
639 #if !defined(OFFICIAL_BUILD) | 721 #if !defined(OFFICIAL_BUILD) |
640 switches::kRendererCheckFalseTest, | 722 switches::kRendererCheckFalseTest, |
641 #endif // !defined(OFFICIAL_BUILD) | 723 #endif // !defined(OFFICIAL_BUILD) |
642 switches::kRendererCrashTest, | 724 switches::kRendererCrashTest, |
643 switches::kRendererStartupDialog, | 725 switches::kRendererStartupDialog, |
644 switches::kNoSandbox, | 726 switches::kShowPaintRects, |
| 727 switches::kSilentDumpOnDCHECK, |
| 728 switches::kSimpleDataSource, |
645 switches::kTestSandbox, | 729 switches::kTestSandbox, |
646 switches::kDisableSeccompSandbox, | |
647 switches::kEnableSeccompSandbox, | |
648 #if !defined (GOOGLE_CHROME_BUILD) | |
649 // These are unsupported and not fully tested modes, so don't enable them | |
650 // for official Google Chrome builds. | |
651 switches::kInProcessPlugins, | |
652 #endif // GOOGLE_CHROME_BUILD | |
653 switches::kAllowScriptingGallery, | |
654 switches::kDomAutomationController, | |
655 switches::kUserAgent, | |
656 switches::kNoReferrers, | |
657 switches::kJavaScriptFlags, | |
658 switches::kRecordMode, | |
659 switches::kPlaybackMode, | |
660 switches::kNoJsRandomness, | |
661 switches::kDisableBreakpad, | |
662 switches::kFullMemoryCrashReport, | |
663 switches::kV, | |
664 switches::kVModule, | |
665 switches::kEnableLogging, | |
666 switches::kDumpHistogramsOnExit, | |
667 switches::kDisableLogging, | |
668 switches::kLoggingLevel, | |
669 switches::kDebugPrint, | |
670 switches::kMemoryProfiling, | |
671 switches::kEnableWatchdog, | |
672 switches::kMessageLoopHistogrammer, | |
673 switches::kEnableDCHECK, | |
674 switches::kSilentDumpOnDCHECK, | |
675 switches::kUseLowFragHeapCrt, | |
676 switches::kEnableSearchProviderApiV2, | |
677 switches::kEnableStatsTable, | |
678 switches::kExperimentalSpellcheckerFeatures, | |
679 switches::kDisableAudio, | |
680 switches::kSimpleDataSource, | |
681 switches::kEnableBenchmarking, | |
682 switches::kEnableNaCl, | |
683 switches::kInternalNaCl, | |
684 switches::kInternalPepper, | |
685 switches::kRegisterPepperPlugins, | |
686 switches::kDisableDatabases, | |
687 switches::kDisableDesktopNotifications, | |
688 switches::kDisableWebSockets, | |
689 switches::kDisableLocalStorage, | |
690 switches::kDisableSessionStorage, | |
691 switches::kDisableSharedWorkers, | |
692 switches::kDisableApplicationCache, | |
693 switches::kDisableDeviceOrientation, | |
694 switches::kDisableIndexedDatabase, | |
695 switches::kDisableSpeechInput, | |
696 switches::kDisableGeolocation, | |
697 switches::kShowPaintRects, | |
698 switches::kEnableOpenMax, | |
699 switches::kVideoThreads, | |
700 switches::kEnableVideoFullscreen, | |
701 switches::kEnableVideoLogging, | |
702 switches::kEnableTouch, | |
703 // We propagate the Chrome Frame command line here as well in case the | |
704 // renderer is not run in the sandbox. | |
705 switches::kChromeFrame, | |
706 // We need to propagate this flag to determine whether to make the | |
707 // WebGLArray constructors on the DOMWindow visible. This | |
708 // information is needed very early during bringup. We prefer to | |
709 // use the WebPreferences to set this flag on a page-by-page basis. | |
710 switches::kDisableExperimentalWebGL, | |
711 switches::kDisableGLSLTranslator, | |
712 switches::kInProcessWebGL, | |
713 // This flag needs to be propagated to the renderer process for | 730 // This flag needs to be propagated to the renderer process for |
714 // --in-process-webgl. | 731 // --in-process-webgl. |
715 switches::kUseGL, | 732 switches::kUseGL, |
716 switches::kDisableAcceleratedCompositing, | 733 switches::kUseLowFragHeapCrt, |
717 #if defined(OS_MACOSX) | 734 switches::kUserAgent, |
718 // Allow this to be set when invoking the browser and relayed along. | 735 switches::kV, |
719 switches::kEnableSandboxLogging, | 736 switches::kVideoThreads, |
720 #endif | 737 switches::kVModule, |
721 switches::kRemoteShellPort, | |
722 switches::kEnablePepperTesting, | |
723 switches::kAllowOutdatedPlugins, | |
724 switches::kNewChromeUISecurityModel, | |
725 switches::kEnableRemoting, | |
726 switches::kEnableClickToPlay, | |
727 switches::kEnableResourceContentSettings, | |
728 switches::kEnableAcceleratedDecoding, | |
729 switches::kDisableFileSystem, | |
730 switches::kPpapiOutOfProcess, | |
731 switches::kEnablePrintPreview, | |
732 switches::kEnableCrxlessWebApps, | |
733 switches::kDisable3DAPIs, | |
734 switches::kEnableInBrowserThumbnailing, | |
735 switches::kEnableWebAudio, | |
736 }; | 738 }; |
737 renderer_cmd->CopySwitchesFrom(browser_cmd, kSwitchNames, | 739 renderer_cmd->CopySwitchesFrom(browser_cmd, kSwitchNames, |
738 arraysize(kSwitchNames)); | 740 arraysize(kSwitchNames)); |
739 | 741 |
740 // Disable databases in incognito mode. | 742 // Disable databases in incognito mode. |
741 if (profile()->IsOffTheRecord() && | 743 if (profile()->IsOffTheRecord() && |
742 !browser_cmd.HasSwitch(switches::kDisableDatabases)) { | 744 !browser_cmd.HasSwitch(switches::kDisableDatabases)) { |
743 renderer_cmd->AppendSwitch(switches::kDisableDatabases); | 745 renderer_cmd->AppendSwitch(switches::kDisableDatabases); |
744 } | 746 } |
745 | 747 |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
821 // Check if the process is still starting and we don't have a handle for it | 823 // Check if the process is still starting and we don't have a handle for it |
822 // yet, in which case this will happen later when InitVisitedLinks is called. | 824 // yet, in which case this will happen later when InitVisitedLinks is called. |
823 if (!run_renderer_in_process() && | 825 if (!run_renderer_in_process() && |
824 (!child_process_.get() || child_process_->IsStarting())) { | 826 (!child_process_.get() || child_process_->IsStarting())) { |
825 return; | 827 return; |
826 } | 828 } |
827 | 829 |
828 ExtensionService* service = profile()->GetExtensionService(); | 830 ExtensionService* service = profile()->GetExtensionService(); |
829 if (!service) | 831 if (!service) |
830 return; | 832 return; |
831 ViewMsg_ExtensionsUpdated_Params params; | 833 |
832 for (size_t i = 0; i < service->extensions()->size(); ++i) { | 834 for (size_t i = 0; i < service->extensions()->size(); ++i) { |
833 const Extension* extension = service->extensions()->at(i); | 835 Send(new ViewMsg_ExtensionLoaded( |
834 ViewMsg_ExtensionRendererInfo info; | 836 ViewMsg_ExtensionLoaded_Params(service->extensions()->at(i)))); |
835 info.id = extension->id(); | |
836 info.web_extent = extension->web_extent(); | |
837 info.name = extension->name(); | |
838 info.location = extension->location(); | |
839 info.allowed_to_execute_script_everywhere = | |
840 extension->CanExecuteScriptEverywhere(); | |
841 info.host_permissions = extension->host_permissions(); | |
842 | |
843 // The icon in the page is 96px. We'd rather not scale up, so use 128. | |
844 info.icon_url = extension->GetIconURL(Extension::EXTENSION_ICON_LARGE, | |
845 ExtensionIconSet::MATCH_EXACTLY); | |
846 if (info.icon_url.is_empty()) | |
847 info.icon_url = GURL("chrome://theme/IDR_APP_DEFAULT_ICON"); | |
848 params.extensions.push_back(info); | |
849 } | 837 } |
850 | |
851 Send(new ViewMsg_ExtensionsUpdated(params)); | |
852 } | 838 } |
853 | 839 |
854 bool BrowserRenderProcessHost::FastShutdownIfPossible() { | 840 bool BrowserRenderProcessHost::FastShutdownIfPossible() { |
855 if (run_renderer_in_process()) | 841 if (run_renderer_in_process()) |
856 return false; // Single process mode can't do fast shutdown. | 842 return false; // Single process mode can't do fast shutdown. |
857 | 843 |
858 if (!child_process_.get() || child_process_->IsStarting() || !GetHandle()) | 844 if (!child_process_.get() || child_process_->IsStarting() || !GetHandle()) |
859 return false; // Render process hasn't started or is probably crashed. | 845 return false; // Render process hasn't started or is probably crashed. |
860 | 846 |
861 // Test if there's an unload listener. | 847 // Test if there's an unload listener. |
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1119 const NotificationDetails& details) { | 1105 const NotificationDetails& details) { |
1120 switch (type.value) { | 1106 switch (type.value) { |
1121 case NotificationType::USER_SCRIPTS_UPDATED: { | 1107 case NotificationType::USER_SCRIPTS_UPDATED: { |
1122 base::SharedMemory* shared_memory = | 1108 base::SharedMemory* shared_memory = |
1123 Details<base::SharedMemory>(details).ptr(); | 1109 Details<base::SharedMemory>(details).ptr(); |
1124 if (shared_memory) { | 1110 if (shared_memory) { |
1125 SendUserScriptsUpdate(shared_memory); | 1111 SendUserScriptsUpdate(shared_memory); |
1126 } | 1112 } |
1127 break; | 1113 break; |
1128 } | 1114 } |
1129 case NotificationType::EXTENSION_LOADED: | 1115 case NotificationType::EXTENSION_LOADED: { |
| 1116 Send(new ViewMsg_ExtensionLoaded( |
| 1117 ViewMsg_ExtensionLoaded_Params( |
| 1118 Details<const Extension>(details).ptr()))); |
| 1119 break; |
| 1120 } |
1130 case NotificationType::EXTENSION_UNLOADED: { | 1121 case NotificationType::EXTENSION_UNLOADED: { |
1131 SendExtensionInfo(); | 1122 Send(new ViewMsg_ExtensionUnloaded( |
| 1123 Details<UnloadedExtensionInfo>(details).ptr()->extension->id())); |
1132 break; | 1124 break; |
1133 } | 1125 } |
1134 case NotificationType::SPELLCHECK_HOST_REINITIALIZED: { | 1126 case NotificationType::SPELLCHECK_HOST_REINITIALIZED: { |
1135 InitSpellChecker(); | 1127 InitSpellChecker(); |
1136 break; | 1128 break; |
1137 } | 1129 } |
1138 case NotificationType::SPELLCHECK_WORD_ADDED: { | 1130 case NotificationType::SPELLCHECK_WORD_ADDED: { |
1139 AddSpellCheckWord( | 1131 AddSpellCheckWord( |
1140 reinterpret_cast<const Source<SpellCheckHost>*>(&source)-> | 1132 reinterpret_cast<const Source<SpellCheckHost>*>(&source)-> |
1141 ptr()->last_added_word()); | 1133 ptr()->last_added_word()); |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1292 IPC::PlatformFileForTransit file; | 1284 IPC::PlatformFileForTransit file; |
1293 #if defined(OS_POSIX) | 1285 #if defined(OS_POSIX) |
1294 file = base::FileDescriptor(model_file, false); | 1286 file = base::FileDescriptor(model_file, false); |
1295 #elif defined(OS_WIN) | 1287 #elif defined(OS_WIN) |
1296 ::DuplicateHandle(::GetCurrentProcess(), model_file, GetHandle(), &file, 0, | 1288 ::DuplicateHandle(::GetCurrentProcess(), model_file, GetHandle(), &file, 0, |
1297 false, DUPLICATE_SAME_ACCESS); | 1289 false, DUPLICATE_SAME_ACCESS); |
1298 #endif | 1290 #endif |
1299 Send(new ViewMsg_SetPhishingModel(file)); | 1291 Send(new ViewMsg_SetPhishingModel(file)); |
1300 } | 1292 } |
1301 } | 1293 } |
OLD | NEW |