OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/chrome_render_thread_observer.h" | 5 #include "chrome/renderer/chrome_render_thread_observer.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <limits> | 9 #include <limits> |
10 #include <memory> | 10 #include <memory> |
11 #include <set> | 11 #include <set> |
12 #include <utility> | 12 #include <utility> |
13 #include <vector> | 13 #include <vector> |
14 | 14 |
15 #include "base/bind.h" | 15 #include "base/bind.h" |
16 #include "base/command_line.h" | 16 #include "base/command_line.h" |
17 #include "base/files/file_util.h" | 17 #include "base/files/file_util.h" |
18 #include "base/location.h" | 18 #include "base/location.h" |
19 #include "base/macros.h" | 19 #include "base/macros.h" |
20 #include "base/memory/ptr_util.h" | 20 #include "base/memory/ptr_util.h" |
21 #include "base/memory/weak_ptr.h" | 21 #include "base/memory/weak_ptr.h" |
22 #include "base/metrics/field_trial.h" | |
23 #include "base/metrics/histogram.h" | 22 #include "base/metrics/histogram.h" |
24 #include "base/metrics/statistics_recorder.h" | 23 #include "base/metrics/statistics_recorder.h" |
25 #include "base/path_service.h" | 24 #include "base/path_service.h" |
26 #include "base/single_thread_task_runner.h" | 25 #include "base/single_thread_task_runner.h" |
27 #include "base/strings/utf_string_conversions.h" | 26 #include "base/strings/utf_string_conversions.h" |
28 #include "base/threading/platform_thread.h" | 27 #include "base/threading/platform_thread.h" |
29 #include "base/threading/thread_task_runner_handle.h" | 28 #include "base/threading/thread_task_runner_handle.h" |
30 #include "build/build_config.h" | 29 #include "build/build_config.h" |
31 #include "chrome/common/child_process_logging.h" | 30 #include "chrome/common/child_process_logging.h" |
32 #include "chrome/common/chrome_paths.h" | 31 #include "chrome/common/chrome_paths.h" |
33 #include "chrome/common/field_trial_recorder.mojom.h" | |
34 #include "chrome/common/media/media_resource_provider.h" | 32 #include "chrome/common/media/media_resource_provider.h" |
35 #include "chrome/common/net/net_resource_provider.h" | 33 #include "chrome/common/net/net_resource_provider.h" |
36 #include "chrome/common/render_messages.h" | 34 #include "chrome/common/render_messages.h" |
37 #include "chrome/common/resource_usage_reporter.mojom.h" | 35 #include "chrome/common/resource_usage_reporter.mojom.h" |
38 #include "chrome/common/resource_usage_reporter_type_converters.h" | 36 #include "chrome/common/resource_usage_reporter_type_converters.h" |
39 #include "chrome/common/url_constants.h" | 37 #include "chrome/common/url_constants.h" |
40 #include "chrome/renderer/content_settings_observer.h" | 38 #include "chrome/renderer/content_settings_observer.h" |
41 #include "chrome/renderer/security_filter_peer.h" | 39 #include "chrome/renderer/security_filter_peer.h" |
42 #include "components/visitedlink/renderer/visitedlink_slave.h" | 40 #include "components/visitedlink/renderer/visitedlink_slave.h" |
43 #include "content/public/child/resource_dispatcher_delegate.h" | 41 #include "content/public/child/resource_dispatcher_delegate.h" |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 mojo::InterfaceRequest<chrome::mojom::ResourceUsageReporter> request) { | 227 mojo::InterfaceRequest<chrome::mojom::ResourceUsageReporter> request) { |
230 mojo::MakeStrongBinding(base::MakeUnique<ResourceUsageReporterImpl>(observer), | 228 mojo::MakeStrongBinding(base::MakeUnique<ResourceUsageReporterImpl>(observer), |
231 std::move(request)); | 229 std::move(request)); |
232 } | 230 } |
233 | 231 |
234 } // namespace | 232 } // namespace |
235 | 233 |
236 bool ChromeRenderThreadObserver::is_incognito_process_ = false; | 234 bool ChromeRenderThreadObserver::is_incognito_process_ = false; |
237 | 235 |
238 ChromeRenderThreadObserver::ChromeRenderThreadObserver() | 236 ChromeRenderThreadObserver::ChromeRenderThreadObserver() |
239 : field_trial_syncer_(this), | 237 : visited_link_slave_(new visitedlink::VisitedLinkSlave), |
240 visited_link_slave_(new visitedlink::VisitedLinkSlave), | |
241 weak_factory_(this) { | 238 weak_factory_(this) { |
242 const base::CommandLine& command_line = | |
243 *base::CommandLine::ForCurrentProcess(); | |
244 | |
245 RenderThread* thread = RenderThread::Get(); | 239 RenderThread* thread = RenderThread::Get(); |
246 resource_delegate_.reset(new RendererResourceDelegate()); | 240 resource_delegate_.reset(new RendererResourceDelegate()); |
247 thread->SetResourceDispatcherDelegate(resource_delegate_.get()); | 241 thread->SetResourceDispatcherDelegate(resource_delegate_.get()); |
248 | 242 |
249 thread->GetInterfaceRegistry()->AddInterface( | 243 thread->GetInterfaceRegistry()->AddInterface( |
250 base::Bind(CreateResourceUsageReporter, weak_factory_.GetWeakPtr())); | 244 base::Bind(CreateResourceUsageReporter, weak_factory_.GetWeakPtr())); |
251 | 245 |
252 // Configure modules that need access to resources. | 246 // Configure modules that need access to resources. |
253 net::NetModule::SetResourceProvider(chrome_common_net::NetResourceProvider); | 247 net::NetModule::SetResourceProvider(chrome_common_net::NetResourceProvider); |
254 media::SetLocalizedStringProvider( | 248 media::SetLocalizedStringProvider( |
255 chrome_common_media::LocalizedStringProvider); | 249 chrome_common_media::LocalizedStringProvider); |
256 | 250 |
257 field_trial_syncer_.InitFieldTrialObserving(command_line, | |
258 switches::kSingleProcess); | |
259 | |
260 // chrome-native: is a scheme used for placeholder navigations that allow | 251 // chrome-native: is a scheme used for placeholder navigations that allow |
261 // UIs to be drawn with platform native widgets instead of HTML. These pages | 252 // UIs to be drawn with platform native widgets instead of HTML. These pages |
262 // should not be accessible, and should also be treated as empty documents | 253 // should not be accessible, and should also be treated as empty documents |
263 // that can commit synchronously. No code should be runnable in these pages, | 254 // that can commit synchronously. No code should be runnable in these pages, |
264 // so it should not need to access anything nor should it allow javascript | 255 // so it should not need to access anything nor should it allow javascript |
265 // URLs since it should never be visible to the user. | 256 // URLs since it should never be visible to the user. |
266 WebString native_scheme(WebString::fromASCII(chrome::kChromeNativeScheme)); | 257 WebString native_scheme(WebString::fromASCII(chrome::kChromeNativeScheme)); |
267 WebSecurityPolicy::registerURLSchemeAsDisplayIsolated(native_scheme); | 258 WebSecurityPolicy::registerURLSchemeAsDisplayIsolated(native_scheme); |
268 WebSecurityPolicy::registerURLSchemeAsEmptyDocument(native_scheme); | 259 WebSecurityPolicy::registerURLSchemeAsEmptyDocument(native_scheme); |
269 WebSecurityPolicy::registerURLSchemeAsNotAllowingJavascriptURLs( | 260 WebSecurityPolicy::registerURLSchemeAsNotAllowingJavascriptURLs( |
(...skipping 18 matching lines...) Expand all Loading... |
288 chrome::mojom::RendererConfiguration::Name_); | 279 chrome::mojom::RendererConfiguration::Name_); |
289 } | 280 } |
290 | 281 |
291 void ChromeRenderThreadObserver::OnRenderProcessShutdown() { | 282 void ChromeRenderThreadObserver::OnRenderProcessShutdown() { |
292 visited_link_slave_.reset(); | 283 visited_link_slave_.reset(); |
293 | 284 |
294 // Workaround for http://crbug.com/672646 | 285 // Workaround for http://crbug.com/672646 |
295 renderer_configuration_bindings_.CloseAllBindings(); | 286 renderer_configuration_bindings_.CloseAllBindings(); |
296 } | 287 } |
297 | 288 |
298 void ChromeRenderThreadObserver::OnFieldTrialGroupFinalized( | |
299 const std::string& trial_name, | |
300 const std::string& group_name) { | |
301 chrome::mojom::FieldTrialRecorderPtr field_trial_recorder; | |
302 content::RenderThread::Get()->GetRemoteInterfaces()->GetInterface( | |
303 &field_trial_recorder); | |
304 field_trial_recorder->FieldTrialActivated(trial_name); | |
305 } | |
306 | |
307 void ChromeRenderThreadObserver::SetInitialConfiguration( | 289 void ChromeRenderThreadObserver::SetInitialConfiguration( |
308 bool is_incognito_process) { | 290 bool is_incognito_process) { |
309 is_incognito_process_ = is_incognito_process; | 291 is_incognito_process_ = is_incognito_process; |
310 } | 292 } |
311 | 293 |
312 void ChromeRenderThreadObserver::SetContentSettingRules( | 294 void ChromeRenderThreadObserver::SetContentSettingRules( |
313 const RendererContentSettingRules& rules) { | 295 const RendererContentSettingRules& rules) { |
314 content_setting_rules_ = rules; | 296 content_setting_rules_ = rules; |
315 } | 297 } |
316 | 298 |
317 void ChromeRenderThreadObserver::SetFieldTrialGroup( | 299 void ChromeRenderThreadObserver::SetFieldTrialGroup( |
318 const std::string& trial_name, | 300 const std::string& trial_name, |
319 const std::string& group_name) { | 301 const std::string& group_name) { |
320 field_trial_syncer_.OnSetFieldTrialGroup(trial_name, group_name); | 302 RenderThread::Get()->SetFieldTrialGroup(trial_name, group_name); |
321 } | 303 } |
322 | 304 |
323 void ChromeRenderThreadObserver::OnRendererConfigurationAssociatedRequest( | 305 void ChromeRenderThreadObserver::OnRendererConfigurationAssociatedRequest( |
324 chrome::mojom::RendererConfigurationAssociatedRequest request) { | 306 chrome::mojom::RendererConfigurationAssociatedRequest request) { |
325 renderer_configuration_bindings_.AddBinding(this, std::move(request)); | 307 renderer_configuration_bindings_.AddBinding(this, std::move(request)); |
326 } | 308 } |
327 | 309 |
328 const RendererContentSettingRules* | 310 const RendererContentSettingRules* |
329 ChromeRenderThreadObserver::content_setting_rules() const { | 311 ChromeRenderThreadObserver::content_setting_rules() const { |
330 return &content_setting_rules_; | 312 return &content_setting_rules_; |
331 } | 313 } |
OLD | NEW |