| 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/renderer/render_thread.h" | 5 #include "chrome/renderer/render_thread.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <map> | 9 #include <map> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
| 13 #include "base/debug/trace_event.h" | 13 #include "base/debug/trace_event.h" |
| 14 #include "base/lazy_instance.h" | 14 #include "base/lazy_instance.h" |
| 15 #include "base/logging.h" | 15 #include "base/logging.h" |
| 16 #include "base/metrics/field_trial.h" | 16 #include "base/metrics/field_trial.h" |
| 17 #include "base/metrics/stats_table.h" | 17 #include "base/metrics/stats_table.h" |
| 18 #include "base/process_util.h" | 18 #include "base/process_util.h" |
| 19 #include "base/scoped_callback_factory.h" | |
| 20 #include "base/shared_memory.h" | 19 #include "base/shared_memory.h" |
| 21 #include "base/string_util.h" | 20 #include "base/string_util.h" |
| 22 #include "base/task.h" | 21 #include "base/task.h" |
| 23 #include "base/threading/thread_local.h" | 22 #include "base/threading/thread_local.h" |
| 24 #include "base/utf_string_conversions.h" | 23 #include "base/utf_string_conversions.h" |
| 25 #include "base/values.h" | 24 #include "base/values.h" |
| 26 #include "chrome/common/appcache/appcache_dispatcher.h" | 25 #include "chrome/common/appcache/appcache_dispatcher.h" |
| 27 #include "chrome/common/child_process_logging.h" | 26 #include "chrome/common/child_process_logging.h" |
| 28 #include "chrome/common/chrome_switches.h" | 27 #include "chrome/common/chrome_switches.h" |
| 29 #include "chrome/common/database_messages.h" | 28 #include "chrome/common/database_messages.h" |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 #include "chrome/renderer/loadtimes_extension_bindings.h" | 61 #include "chrome/renderer/loadtimes_extension_bindings.h" |
| 63 #include "chrome/renderer/net/renderer_net_predictor.h" | 62 #include "chrome/renderer/net/renderer_net_predictor.h" |
| 64 #include "chrome/renderer/plugin_channel_host.h" | 63 #include "chrome/renderer/plugin_channel_host.h" |
| 65 #include "chrome/renderer/render_process_impl.h" | 64 #include "chrome/renderer/render_process_impl.h" |
| 66 #include "chrome/renderer/render_view.h" | 65 #include "chrome/renderer/render_view.h" |
| 67 #include "chrome/renderer/render_view_visitor.h" | 66 #include "chrome/renderer/render_view_visitor.h" |
| 68 #include "chrome/renderer/renderer_histogram_snapshots.h" | 67 #include "chrome/renderer/renderer_histogram_snapshots.h" |
| 69 #include "chrome/renderer/renderer_webidbfactory_impl.h" | 68 #include "chrome/renderer/renderer_webidbfactory_impl.h" |
| 70 #include "chrome/renderer/renderer_webkitclient_impl.h" | 69 #include "chrome/renderer/renderer_webkitclient_impl.h" |
| 71 #include "chrome/renderer/safe_browsing/phishing_classifier_delegate.h" | 70 #include "chrome/renderer/safe_browsing/phishing_classifier_delegate.h" |
| 72 #include "chrome/renderer/safe_browsing/scorer.h" | |
| 73 #include "chrome/renderer/search_extension.h" | 71 #include "chrome/renderer/search_extension.h" |
| 74 #include "chrome/renderer/searchbox_extension.h" | 72 #include "chrome/renderer/searchbox_extension.h" |
| 75 #include "chrome/renderer/spellchecker/spellcheck.h" | 73 #include "chrome/renderer/spellchecker/spellcheck.h" |
| 76 #include "chrome/renderer/user_script_slave.h" | 74 #include "chrome/renderer/user_script_slave.h" |
| 77 #include "ipc/ipc_channel_handle.h" | 75 #include "ipc/ipc_channel_handle.h" |
| 78 #include "ipc/ipc_message.h" | 76 #include "ipc/ipc_message.h" |
| 79 #include "ipc/ipc_platform_file.h" | 77 #include "ipc/ipc_platform_file.h" |
| 80 #include "net/base/net_util.h" | 78 #include "net/base/net_util.h" |
| 81 #include "third_party/sqlite/sqlite3.h" | 79 #include "third_party/sqlite/sqlite3.h" |
| 82 #include "third_party/tcmalloc/chromium/src/google/malloc_extension.h" | 80 #include "third_party/tcmalloc/chromium/src/google/malloc_extension.h" |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 return true; | 208 return true; |
| 211 } | 209 } |
| 212 | 210 |
| 213 private: | 211 private: |
| 214 std::string host_; | 212 std::string host_; |
| 215 double zoom_level_; | 213 double zoom_level_; |
| 216 | 214 |
| 217 DISALLOW_COPY_AND_ASSIGN(RenderViewZoomer); | 215 DISALLOW_COPY_AND_ASSIGN(RenderViewZoomer); |
| 218 }; | 216 }; |
| 219 | 217 |
| 220 class RenderViewPhishingScorerSetter : public RenderViewVisitor { | |
| 221 public: | |
| 222 explicit RenderViewPhishingScorerSetter(const safe_browsing::Scorer* scorer) | |
| 223 : scorer_(scorer) { | |
| 224 } | |
| 225 | |
| 226 virtual bool Visit(RenderView* render_view) { | |
| 227 safe_browsing::PhishingClassifierDelegate* delegate = | |
| 228 render_view->phishing_classifier_delegate(); | |
| 229 if (delegate) | |
| 230 delegate->SetPhishingScorer(scorer_); | |
| 231 return true; | |
| 232 } | |
| 233 | |
| 234 private: | |
| 235 const safe_browsing::Scorer* scorer_; | |
| 236 | |
| 237 DISALLOW_COPY_AND_ASSIGN(RenderViewPhishingScorerSetter); | |
| 238 }; | |
| 239 | |
| 240 } // namespace | 218 } // namespace |
| 241 | 219 |
| 242 // When we run plugins in process, we actually run them on the render thread, | 220 // When we run plugins in process, we actually run them on the render thread, |
| 243 // which means that we need to make the render thread pump UI events. | 221 // which means that we need to make the render thread pump UI events. |
| 244 RenderThread::RenderThread() { | 222 RenderThread::RenderThread() { |
| 245 Init(); | 223 Init(); |
| 246 } | 224 } |
| 247 | 225 |
| 248 RenderThread::RenderThread(const std::string& channel_name) | 226 RenderThread::RenderThread(const std::string& channel_name) |
| 249 : ChildThread(channel_name) { | 227 : ChildThread(channel_name) { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 270 is_speech_input_enabled_ = false; | 248 is_speech_input_enabled_ = false; |
| 271 suspend_webkit_shared_timer_ = true; | 249 suspend_webkit_shared_timer_ = true; |
| 272 notify_webkit_of_modal_loop_ = true; | 250 notify_webkit_of_modal_loop_ = true; |
| 273 plugin_refresh_allowed_ = true; | 251 plugin_refresh_allowed_ = true; |
| 274 cache_stats_task_pending_ = false; | 252 cache_stats_task_pending_ = false; |
| 275 widget_count_ = 0; | 253 widget_count_ = 0; |
| 276 hidden_widget_count_ = 0; | 254 hidden_widget_count_ = 0; |
| 277 idle_notification_delay_in_s_ = is_extension_process_ ? | 255 idle_notification_delay_in_s_ = is_extension_process_ ? |
| 278 kInitialExtensionIdleHandlerDelayS : kInitialIdleHandlerDelayS; | 256 kInitialExtensionIdleHandlerDelayS : kInitialIdleHandlerDelayS; |
| 279 task_factory_.reset(new ScopedRunnableMethodFactory<RenderThread>(this)); | 257 task_factory_.reset(new ScopedRunnableMethodFactory<RenderThread>(this)); |
| 280 callback_factory_.reset(new base::ScopedCallbackFactory<RenderThread>(this)); | |
| 281 | 258 |
| 282 visited_link_slave_.reset(new VisitedLinkSlave()); | 259 visited_link_slave_.reset(new VisitedLinkSlave()); |
| 283 user_script_slave_.reset(new UserScriptSlave(&extensions_)); | 260 user_script_slave_.reset(new UserScriptSlave(&extensions_)); |
| 284 renderer_net_predictor_.reset(new RendererNetPredictor()); | 261 renderer_net_predictor_.reset(new RendererNetPredictor()); |
| 285 histogram_snapshots_.reset(new RendererHistogramSnapshots()); | 262 histogram_snapshots_.reset(new RendererHistogramSnapshots()); |
| 286 appcache_dispatcher_.reset(new AppCacheDispatcher(this)); | 263 appcache_dispatcher_.reset(new AppCacheDispatcher(this)); |
| 287 indexed_db_dispatcher_.reset(new IndexedDBDispatcher()); | 264 indexed_db_dispatcher_.reset(new IndexedDBDispatcher()); |
| 288 spellchecker_.reset(new SpellCheck()); | 265 spellchecker_.reset(new SpellCheck()); |
| 289 | 266 |
| 290 devtools_agent_filter_ = new DevToolsAgentFilter(); | 267 devtools_agent_filter_ = new DevToolsAgentFilter(); |
| (...skipping 816 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1107 if (channel_handle.name.size() != 0) { | 1084 if (channel_handle.name.size() != 0) { |
| 1108 // Connect to the GPU process if a channel name was received. | 1085 // Connect to the GPU process if a channel name was received. |
| 1109 gpu_channel_->Connect(channel_handle); | 1086 gpu_channel_->Connect(channel_handle); |
| 1110 } else { | 1087 } else { |
| 1111 // Otherwise cancel the connection. | 1088 // Otherwise cancel the connection. |
| 1112 gpu_channel_ = NULL; | 1089 gpu_channel_ = NULL; |
| 1113 } | 1090 } |
| 1114 } | 1091 } |
| 1115 | 1092 |
| 1116 void RenderThread::OnSetPhishingModel(IPC::PlatformFileForTransit model_file) { | 1093 void RenderThread::OnSetPhishingModel(IPC::PlatformFileForTransit model_file) { |
| 1117 safe_browsing::Scorer::CreateFromFile( | 1094 safe_browsing::PhishingClassifierDelegate::SetPhishingModel(model_file); |
| 1118 IPC::PlatformFileForTransitToPlatformFile(model_file), | |
| 1119 GetFileThreadMessageLoopProxy(), | |
| 1120 callback_factory_->NewCallback(&RenderThread::PhishingScorerCreated)); | |
| 1121 } | |
| 1122 | |
| 1123 void RenderThread::PhishingScorerCreated(safe_browsing::Scorer* scorer) { | |
| 1124 if (!scorer) { | |
| 1125 DLOG(ERROR) << "Unable to create a PhishingScorer - corrupt model?"; | |
| 1126 return; | |
| 1127 } | |
| 1128 phishing_scorer_.reset(scorer); | |
| 1129 RenderViewPhishingScorerSetter setter(phishing_scorer_.get()); | |
| 1130 RenderView::ForEach(&setter); | |
| 1131 } | 1095 } |
| 1132 | 1096 |
| 1133 scoped_refptr<base::MessageLoopProxy> | 1097 scoped_refptr<base::MessageLoopProxy> |
| 1134 RenderThread::GetFileThreadMessageLoopProxy() { | 1098 RenderThread::GetFileThreadMessageLoopProxy() { |
| 1135 DCHECK(message_loop() == MessageLoop::current()); | 1099 DCHECK(message_loop() == MessageLoop::current()); |
| 1136 if (!file_thread_.get()) { | 1100 if (!file_thread_.get()) { |
| 1137 file_thread_.reset(new base::Thread("Renderer::FILE")); | 1101 file_thread_.reset(new base::Thread("Renderer::FILE")); |
| 1138 file_thread_->Start(); | 1102 file_thread_->Start(); |
| 1139 } | 1103 } |
| 1140 return file_thread_->message_loop_proxy(); | 1104 return file_thread_->message_loop_proxy(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1160 } | 1124 } |
| 1161 | 1125 |
| 1162 return false; | 1126 return false; |
| 1163 } | 1127 } |
| 1164 | 1128 |
| 1165 void RenderThread::RegisterExtension(v8::Extension* extension, | 1129 void RenderThread::RegisterExtension(v8::Extension* extension, |
| 1166 bool restrict_to_extensions) { | 1130 bool restrict_to_extensions) { |
| 1167 WebScriptController::registerExtension(extension); | 1131 WebScriptController::registerExtension(extension); |
| 1168 v8_extensions_[extension->name()] = restrict_to_extensions; | 1132 v8_extensions_[extension->name()] = restrict_to_extensions; |
| 1169 } | 1133 } |
| OLD | NEW |