| 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 |