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

Side by Side Diff: content/browser/renderer_host/browser_render_process_host.cc

Issue 6880320: Move code that talks to spellchecking out of content. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 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 | Annotate | Revision Log
OLDNEW
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 "content/browser/renderer_host/browser_render_process_host.h" 8 #include "content/browser/renderer_host/browser_render_process_host.h"
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 17 matching lines...) Expand all
28 #include "base/threading/thread_restrictions.h" 28 #include "base/threading/thread_restrictions.h"
29 #include "chrome/browser/browser_process.h" 29 #include "chrome/browser/browser_process.h"
30 #include "chrome/browser/history/history.h" 30 #include "chrome/browser/history/history.h"
31 #include "chrome/browser/io_thread.h" 31 #include "chrome/browser/io_thread.h"
32 #include "chrome/browser/net/resolve_proxy_msg_helper.h" 32 #include "chrome/browser/net/resolve_proxy_msg_helper.h"
33 #include "chrome/browser/platform_util.h" 33 #include "chrome/browser/platform_util.h"
34 #include "chrome/browser/prefs/pref_service.h" 34 #include "chrome/browser/prefs/pref_service.h"
35 #include "chrome/browser/profiles/profile.h" 35 #include "chrome/browser/profiles/profile.h"
36 #include "chrome/browser/renderer_host/web_cache_manager.h" 36 #include "chrome/browser/renderer_host/web_cache_manager.h"
37 #include "chrome/browser/safe_browsing/client_side_detection_service.h" 37 #include "chrome/browser/safe_browsing/client_side_detection_service.h"
38 #include "chrome/browser/spellcheck_host.h"
39 #include "chrome/common/chrome_paths.h" 38 #include "chrome/common/chrome_paths.h"
40 #include "chrome/common/chrome_switches.h" 39 #include "chrome/common/chrome_switches.h"
41 #include "chrome/common/logging_chrome.h" 40 #include "chrome/common/logging_chrome.h"
42 #include "chrome/common/pref_names.h" 41 #include "chrome/common/pref_names.h"
43 #include "chrome/common/render_messages.h" 42 #include "chrome/common/render_messages.h"
44 #include "chrome/common/safe_browsing/safebrowsing_messages.h" 43 #include "chrome/common/safe_browsing/safebrowsing_messages.h"
45 #include "chrome/common/spellcheck_messages.h"
46 #include "content/browser/appcache/appcache_dispatcher_host.h" 44 #include "content/browser/appcache/appcache_dispatcher_host.h"
47 #include "content/browser/browser_child_process_host.h" 45 #include "content/browser/browser_child_process_host.h"
48 #include "content/browser/child_process_security_policy.h" 46 #include "content/browser/child_process_security_policy.h"
49 #include "content/browser/content_browser_client.h" 47 #include "content/browser/content_browser_client.h"
50 #include "content/browser/device_orientation/message_filter.h" 48 #include "content/browser/device_orientation/message_filter.h"
51 #include "content/browser/geolocation/geolocation_dispatcher_host.h" 49 #include "content/browser/geolocation/geolocation_dispatcher_host.h"
52 #include "content/browser/gpu_data_manager.h" 50 #include "content/browser/gpu_data_manager.h"
53 #include "content/browser/gpu_process_host.h" 51 #include "content/browser/gpu_process_host.h"
54 #include "content/browser/in_process_webkit/dom_storage_message_filter.h" 52 #include "content/browser/in_process_webkit/dom_storage_message_filter.h"
55 #include "content/browser/in_process_webkit/indexed_db_dispatcher_host.h" 53 #include "content/browser/in_process_webkit/indexed_db_dispatcher_host.h"
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 visible_widgets_(0), 194 visible_widgets_(0),
197 backgrounded_(true), 195 backgrounded_(true),
198 ALLOW_THIS_IN_INITIALIZER_LIST(cached_dibs_cleaner_( 196 ALLOW_THIS_IN_INITIALIZER_LIST(cached_dibs_cleaner_(
199 base::TimeDelta::FromSeconds(5), 197 base::TimeDelta::FromSeconds(5),
200 this, &BrowserRenderProcessHost::ClearTransportDIBCache)), 198 this, &BrowserRenderProcessHost::ClearTransportDIBCache)),
201 accessibility_enabled_(false), 199 accessibility_enabled_(false),
202 extension_process_(false), 200 extension_process_(false),
203 callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { 201 callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
204 widget_helper_ = new RenderWidgetHelper(); 202 widget_helper_ = new RenderWidgetHelper();
205 203
206 registrar_.Add(this, NotificationType::SPELLCHECK_HOST_REINITIALIZED,
207 NotificationService::AllSources());
208 registrar_.Add(this, NotificationType::SPELLCHECK_WORD_ADDED,
209 NotificationService::AllSources());
210 registrar_.Add(this, NotificationType::SPELLCHECK_AUTOSPELL_TOGGLED,
211 NotificationService::AllSources());
212
213 WebCacheManager::GetInstance()->Add(id()); 204 WebCacheManager::GetInstance()->Add(id());
214 ChildProcessSecurityPolicy::GetInstance()->Add(id()); 205 ChildProcessSecurityPolicy::GetInstance()->Add(id());
215 206
216 // Grant most file permissions to this renderer. 207 // Grant most file permissions to this renderer.
217 // PLATFORM_FILE_TEMPORARY, PLATFORM_FILE_HIDDEN and 208 // PLATFORM_FILE_TEMPORARY, PLATFORM_FILE_HIDDEN and
218 // PLATFORM_FILE_DELETE_ON_CLOSE are not granted, because no existing API 209 // PLATFORM_FILE_DELETE_ON_CLOSE are not granted, because no existing API
219 // requests them. 210 // requests them.
220 ChildProcessSecurityPolicy::GetInstance()->GrantPermissionsForFile( 211 ChildProcessSecurityPolicy::GetInstance()->GrantPermissionsForFile(
221 id(), profile->GetPath().Append( 212 id(), profile->GetPath().Append(
222 fileapi::SandboxMountPointProvider::kFileSystemDirectory), 213 fileapi::SandboxMountPointProvider::kFileSystemDirectory),
(...skipping 594 matching lines...) Expand 10 before | Expand all | Expand 10 after
817 if (msg.routing_id() == MSG_ROUTING_CONTROL) { 808 if (msg.routing_id() == MSG_ROUTING_CONTROL) {
818 // Dispatch control messages. 809 // Dispatch control messages.
819 bool msg_is_ok = true; 810 bool msg_is_ok = true;
820 IPC_BEGIN_MESSAGE_MAP_EX(BrowserRenderProcessHost, msg, msg_is_ok) 811 IPC_BEGIN_MESSAGE_MAP_EX(BrowserRenderProcessHost, msg, msg_is_ok)
821 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdatedCacheStats, 812 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdatedCacheStats,
822 OnUpdatedCacheStats) 813 OnUpdatedCacheStats)
823 IPC_MESSAGE_HANDLER(ViewHostMsg_SuddenTerminationChanged, 814 IPC_MESSAGE_HANDLER(ViewHostMsg_SuddenTerminationChanged,
824 SuddenTerminationChanged) 815 SuddenTerminationChanged)
825 IPC_MESSAGE_HANDLER(ViewHostMsg_UserMetricsRecordAction, 816 IPC_MESSAGE_HANDLER(ViewHostMsg_UserMetricsRecordAction,
826 OnUserMetricsRecordAction) 817 OnUserMetricsRecordAction)
827 IPC_MESSAGE_HANDLER(SpellCheckHostMsg_RequestDictionary,
828 OnSpellCheckerRequestDictionary)
829 IPC_MESSAGE_UNHANDLED_ERROR() 818 IPC_MESSAGE_UNHANDLED_ERROR()
830 IPC_END_MESSAGE_MAP_EX() 819 IPC_END_MESSAGE_MAP_EX()
831 820
832 if (!msg_is_ok) { 821 if (!msg_is_ok) {
833 // The message had a handler, but its de-serialization failed. 822 // The message had a handler, but its de-serialization failed.
834 // We consider this a capital crime. Kill the renderer if we have one. 823 // We consider this a capital crime. Kill the renderer if we have one.
835 LOG(ERROR) << "bad message " << msg.type() << " terminating renderer."; 824 LOG(ERROR) << "bad message " << msg.type() << " terminating renderer.";
836 UserMetrics::RecordAction(UserMetricsAction("BadMessageTerminate_BRPH")); 825 UserMetrics::RecordAction(UserMetricsAction("BadMessageTerminate_BRPH"));
837 ReceivedBadMessage(); 826 ReceivedBadMessage();
838 } 827 }
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
938 // intercepted the stack is messed up on return from the interceptor 927 // intercepted the stack is messed up on return from the interceptor
939 // which causes random crashes in the browser process. Our hack for now 928 // which causes random crashes in the browser process. Our hack for now
940 // is to not invoke the SetPriorityClass API if the dll is loaded. 929 // is to not invoke the SetPriorityClass API if the dll is loaded.
941 if (GetModuleHandle(L"cbstext.dll")) 930 if (GetModuleHandle(L"cbstext.dll"))
942 return; 931 return;
943 #endif // OS_WIN 932 #endif // OS_WIN
944 933
945 child_process_launcher_->SetProcessBackgrounded(backgrounded); 934 child_process_launcher_->SetProcessBackgrounded(backgrounded);
946 } 935 }
947 936
948 void BrowserRenderProcessHost::Observe(NotificationType type,
949 const NotificationSource& source,
950 const NotificationDetails& details) {
951 switch (type.value) {
952 case NotificationType::SPELLCHECK_HOST_REINITIALIZED: {
953 InitSpellChecker();
954 break;
955 }
956 case NotificationType::SPELLCHECK_WORD_ADDED: {
957 AddSpellCheckWord(
958 reinterpret_cast<const Source<SpellCheckHost>*>(&source)->
959 ptr()->GetLastAddedFile());
960 break;
961 }
962 case NotificationType::SPELLCHECK_AUTOSPELL_TOGGLED: {
963 PrefService* prefs = profile()->GetPrefs();
964 EnableAutoSpellCorrect(
965 prefs->GetBoolean(prefs::kEnableAutoSpellCorrect));
966 break;
967 }
968 default: {
969 NOTREACHED();
970 break;
971 }
972 }
973 }
974
975 void BrowserRenderProcessHost::OnProcessLaunched() { 937 void BrowserRenderProcessHost::OnProcessLaunched() {
976 if (child_process_launcher_.get()) 938 if (child_process_launcher_.get())
977 child_process_launcher_->SetProcessBackgrounded(backgrounded_); 939 child_process_launcher_->SetProcessBackgrounded(backgrounded_);
978 940
979 Send(new ViewMsg_SetIsIncognitoProcess(profile()->IsOffTheRecord())); 941 Send(new ViewMsg_SetIsIncognitoProcess(profile()->IsOffTheRecord()));
980 942
981 // We don't want to initialize the spellchecker unless SpellCheckHost has been
982 // created. In InitSpellChecker(), we know if GetSpellCheckHost() is NULL
983 // then the spellchecker has been turned off, but here, we don't know if
984 // it's been turned off or just not loaded yet.
985 if (profile()->GetSpellCheckHost())
986 InitSpellChecker();
987
988 InitClientSidePhishingDetection(); 943 InitClientSidePhishingDetection();
989 944
990 if (max_page_id_ != -1) 945 if (max_page_id_ != -1)
991 Send(new ViewMsg_SetNextPageID(max_page_id_ + 1)); 946 Send(new ViewMsg_SetNextPageID(max_page_id_ + 1));
992 947
993 // NOTE: This needs to be before sending queued messages because 948 // NOTE: This needs to be before sending queued messages because
994 // ExtensionService uses this notification to initialize the renderer process 949 // ExtensionService uses this notification to initialize the renderer process
995 // with state that must be there before any JavaScript executes. 950 // with state that must be there before any JavaScript executes.
996 // 951 //
997 // The queued messages contain such things as "navigate". If this notification 952 // The queued messages contain such things as "navigate". If this notification
998 // was after, we can end up executing JavaScript before the initialization 953 // was after, we can end up executing JavaScript before the initialization
999 // happens. 954 // happens.
1000 NotificationService::current()->Notify( 955 NotificationService::current()->Notify(
1001 NotificationType::RENDERER_PROCESS_CREATED, 956 NotificationType::RENDERER_PROCESS_CREATED,
1002 Source<RenderProcessHost>(this), NotificationService::NoDetails()); 957 Source<RenderProcessHost>(this), NotificationService::NoDetails());
1003 958
1004 while (!queued_messages_.empty()) { 959 while (!queued_messages_.empty()) {
1005 Send(queued_messages_.front()); 960 Send(queued_messages_.front());
1006 queued_messages_.pop(); 961 queued_messages_.pop();
1007 } 962 }
1008 } 963 }
1009 964
1010 void BrowserRenderProcessHost::OnUserMetricsRecordAction( 965 void BrowserRenderProcessHost::OnUserMetricsRecordAction(
1011 const std::string& action) { 966 const std::string& action) {
1012 UserMetrics::RecordComputedAction(action); 967 UserMetrics::RecordComputedAction(action);
1013 } 968 }
1014 969
1015 void BrowserRenderProcessHost::OnSpellCheckerRequestDictionary() {
1016 if (profile()->GetSpellCheckHost()) {
1017 // The spellchecker initialization already started and finished; just send
1018 // it to the renderer.
1019 InitSpellChecker();
1020 } else {
1021 // We may have gotten multiple requests from different renderers. We don't
1022 // want to initialize multiple times in this case, so we set |force| to
1023 // false.
1024 profile()->ReinitializeSpellCheckHost(false);
1025 }
1026 }
1027
1028 void BrowserRenderProcessHost::AddSpellCheckWord(const std::string& word) {
1029 Send(new SpellCheckMsg_WordAdded(word));
1030 }
1031
1032 void BrowserRenderProcessHost::InitSpellChecker() {
1033 SpellCheckHost* spellcheck_host = profile()->GetSpellCheckHost();
1034 if (spellcheck_host) {
1035 PrefService* prefs = profile()->GetPrefs();
1036 IPC::PlatformFileForTransit file;
1037
1038 if (spellcheck_host->GetDictionaryFile() !=
1039 base::kInvalidPlatformFileValue) {
1040 #if defined(OS_POSIX)
1041 file = base::FileDescriptor(spellcheck_host->GetDictionaryFile(), false);
1042 #elif defined(OS_WIN)
1043 ::DuplicateHandle(::GetCurrentProcess(),
1044 spellcheck_host->GetDictionaryFile(),
1045 GetHandle(),
1046 &file,
1047 0,
1048 false,
1049 DUPLICATE_SAME_ACCESS);
1050 #endif
1051 }
1052
1053 Send(new SpellCheckMsg_Init(
1054 file,
1055 spellcheck_host->GetCustomWords(),
1056 spellcheck_host->GetLanguage(),
1057 prefs->GetBoolean(prefs::kEnableAutoSpellCorrect)));
1058 } else {
1059 Send(new SpellCheckMsg_Init(
1060 IPC::InvalidPlatformFileForTransit(),
1061 std::vector<std::string>(),
1062 std::string(),
1063 false));
1064 }
1065 }
1066
1067 void BrowserRenderProcessHost::EnableAutoSpellCorrect(bool enable) {
1068 Send(new SpellCheckMsg_EnableAutoSpellCorrect(enable));
1069 }
1070
1071 void BrowserRenderProcessHost::InitClientSidePhishingDetection() { 970 void BrowserRenderProcessHost::InitClientSidePhishingDetection() {
1072 if (g_browser_process->safe_browsing_detection_service()) { 971 if (g_browser_process->safe_browsing_detection_service()) {
1073 // The BrowserRenderProcessHost object might get deleted before the 972 // The BrowserRenderProcessHost object might get deleted before the
1074 // safe browsing client-side detection service class is done with opening 973 // safe browsing client-side detection service class is done with opening
1075 // the model file. To avoid crashing we use the callback factory which will 974 // the model file. To avoid crashing we use the callback factory which will
1076 // cancel the callback if |this| is destroyed. 975 // cancel the callback if |this| is destroyed.
1077 g_browser_process->safe_browsing_detection_service()->GetModelFile( 976 g_browser_process->safe_browsing_detection_service()->GetModelFile(
1078 callback_factory_.NewCallback( 977 callback_factory_.NewCallback(
1079 &BrowserRenderProcessHost::OpenPhishingModelDone)); 978 &BrowserRenderProcessHost::OpenPhishingModelDone));
1080 } 979 }
1081 } 980 }
1082 981
1083 void BrowserRenderProcessHost::OpenPhishingModelDone( 982 void BrowserRenderProcessHost::OpenPhishingModelDone(
1084 base::PlatformFile model_file) { 983 base::PlatformFile model_file) {
1085 if (model_file != base::kInvalidPlatformFileValue) { 984 if (model_file != base::kInvalidPlatformFileValue) {
1086 IPC::PlatformFileForTransit file; 985 IPC::PlatformFileForTransit file;
1087 #if defined(OS_POSIX) 986 #if defined(OS_POSIX)
1088 file = base::FileDescriptor(model_file, false); 987 file = base::FileDescriptor(model_file, false);
1089 #elif defined(OS_WIN) 988 #elif defined(OS_WIN)
1090 ::DuplicateHandle(::GetCurrentProcess(), model_file, GetHandle(), &file, 0, 989 ::DuplicateHandle(::GetCurrentProcess(), model_file, GetHandle(), &file, 0,
1091 false, DUPLICATE_SAME_ACCESS); 990 false, DUPLICATE_SAME_ACCESS);
1092 #endif 991 #endif
1093 Send(new SafeBrowsingMsg_SetPhishingModel(file)); 992 Send(new SafeBrowsingMsg_SetPhishingModel(file));
1094 } 993 }
1095 } 994 }
OLDNEW
« no previous file with comments | « content/browser/renderer_host/browser_render_process_host.h ('k') | content/browser/tab_contents/tab_contents.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698