| 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_content_renderer_client.h" | 5 #include "chrome/renderer/chrome_content_renderer_client.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/debug/crash_logging.h" | 8 #include "base/debug/crash_logging.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/metrics/field_trial.h" | 10 #include "base/metrics/field_trial.h" |
| 11 #include "base/metrics/histogram.h" | 11 #include "base/metrics/histogram.h" |
| 12 #include "base/metrics/user_metrics_action.h" | 12 #include "base/metrics/user_metrics_action.h" |
| 13 #include "base/strings/string_number_conversions.h" | 13 #include "base/strings/string_number_conversions.h" |
| 14 #include "base/strings/string_util.h" | 14 #include "base/strings/string_util.h" |
| 15 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
| 16 #include "base/values.h" | 16 #include "base/values.h" |
| 17 #include "chrome/common/channel_info.h" | 17 #include "chrome/common/channel_info.h" |
| 18 #include "chrome/common/chrome_isolated_world_ids.h" | 18 #include "chrome/common/chrome_isolated_world_ids.h" |
| 19 #include "chrome/common/chrome_paths.h" | 19 #include "chrome/common/chrome_paths.h" |
| 20 #include "chrome/common/chrome_switches.h" | 20 #include "chrome/common/chrome_switches.h" |
| 21 #include "chrome/common/crash_keys.h" | 21 #include "chrome/common/crash_keys.h" |
| 22 #include "chrome/common/extensions/extension_metrics.h" | |
| 23 #include "chrome/common/localized_error.h" | 22 #include "chrome/common/localized_error.h" |
| 24 #include "chrome/common/pepper_permission_util.h" | 23 #include "chrome/common/pepper_permission_util.h" |
| 25 #include "chrome/common/render_messages.h" | 24 #include "chrome/common/render_messages.h" |
| 26 #include "chrome/common/secure_origin_whitelist.h" | 25 #include "chrome/common/secure_origin_whitelist.h" |
| 27 #include "chrome/common/url_constants.h" | 26 #include "chrome/common/url_constants.h" |
| 28 #include "chrome/grit/generated_resources.h" | 27 #include "chrome/grit/generated_resources.h" |
| 29 #include "chrome/grit/locale_settings.h" | 28 #include "chrome/grit/locale_settings.h" |
| 30 #include "chrome/grit/renderer_resources.h" | 29 #include "chrome/grit/renderer_resources.h" |
| 31 #include "chrome/renderer/banners/app_banner_client.h" | 30 #include "chrome/renderer/banners/app_banner_client.h" |
| 32 #include "chrome/renderer/benchmarking_extension.h" | 31 #include "chrome/renderer/benchmarking_extension.h" |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 #include "ui/base/webui/jstemplate_builder.h" | 102 #include "ui/base/webui/jstemplate_builder.h" |
| 104 #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. | 103 #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. |
| 105 | 104 |
| 106 #if !defined(DISABLE_NACL) | 105 #if !defined(DISABLE_NACL) |
| 107 #include "components/nacl/common/nacl_constants.h" | 106 #include "components/nacl/common/nacl_constants.h" |
| 108 #include "components/nacl/renderer/nacl_helper.h" | 107 #include "components/nacl/renderer/nacl_helper.h" |
| 109 #endif | 108 #endif |
| 110 | 109 |
| 111 #if defined(ENABLE_EXTENSIONS) | 110 #if defined(ENABLE_EXTENSIONS) |
| 112 #include "chrome/common/extensions/chrome_extensions_client.h" | 111 #include "chrome/common/extensions/chrome_extensions_client.h" |
| 113 #include "chrome/common/extensions/extension_process_policy.h" | |
| 114 #include "chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.h" | |
| 115 #include "chrome/renderer/extensions/chrome_extensions_renderer_client.h" | 112 #include "chrome/renderer/extensions/chrome_extensions_renderer_client.h" |
| 116 #include "chrome/renderer/extensions/renderer_permissions_policy_delegate.h" | |
| 117 #include "chrome/renderer/extensions/resource_request_policy.h" | |
| 118 #include "chrome/renderer/media/cast_ipc_dispatcher.h" | |
| 119 #include "extensions/common/extension.h" | |
| 120 #include "extensions/common/extension_set.h" | |
| 121 #include "extensions/common/extension_urls.h" | 113 #include "extensions/common/extension_urls.h" |
| 122 #include "extensions/common/switches.h" | 114 #include "extensions/common/switches.h" |
| 123 #include "extensions/renderer/dispatcher.h" | 115 #include "extensions/renderer/dispatcher.h" |
| 124 #include "extensions/renderer/extension_frame_helper.h" | |
| 125 #include "extensions/renderer/extension_helper.h" | |
| 126 #include "extensions/renderer/extensions_render_frame_observer.h" | |
| 127 #include "extensions/renderer/guest_view/extensions_guest_view_container.h" | |
| 128 #include "extensions/renderer/guest_view/extensions_guest_view_container_dispatc
her.h" | |
| 129 #include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_con
tainer.h" | |
| 130 #include "extensions/renderer/renderer_extension_registry.h" | 116 #include "extensions/renderer/renderer_extension_registry.h" |
| 131 #include "extensions/renderer/script_context.h" | |
| 132 #endif | 117 #endif |
| 133 | 118 |
| 134 #if defined(ENABLE_IPC_FUZZER) | 119 #if defined(ENABLE_IPC_FUZZER) |
| 135 #include "chrome/common/external_ipc_dumper.h" | 120 #include "chrome/common/external_ipc_dumper.h" |
| 136 #endif | 121 #endif |
| 137 | 122 |
| 138 #if defined(ENABLE_PLUGINS) | 123 #if defined(ENABLE_PLUGINS) |
| 139 #include "chrome/renderer/plugins/chrome_plugin_placeholder.h" | 124 #include "chrome/renderer/plugins/chrome_plugin_placeholder.h" |
| 140 #endif | 125 #endif |
| 141 | 126 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 155 | 140 |
| 156 #if defined(ENABLE_WEBRTC) | 141 #if defined(ENABLE_WEBRTC) |
| 157 #include "chrome/renderer/media/webrtc_logging_message_filter.h" | 142 #include "chrome/renderer/media/webrtc_logging_message_filter.h" |
| 158 #endif | 143 #endif |
| 159 | 144 |
| 160 using autofill::AutofillAgent; | 145 using autofill::AutofillAgent; |
| 161 using autofill::PasswordAutofillAgent; | 146 using autofill::PasswordAutofillAgent; |
| 162 using autofill::PasswordGenerationAgent; | 147 using autofill::PasswordGenerationAgent; |
| 163 using base::ASCIIToUTF16; | 148 using base::ASCIIToUTF16; |
| 164 using base::UserMetricsAction; | 149 using base::UserMetricsAction; |
| 165 using content::PluginInstanceThrottler; | |
| 166 using content::RenderFrame; | |
| 167 using content::RenderThread; | |
| 168 using content::WebPluginInfo; | |
| 169 using extensions::Extension; | |
| 170 using blink::WebCache; | 150 using blink::WebCache; |
| 171 using blink::WebConsoleMessage; | 151 using blink::WebConsoleMessage; |
| 172 using blink::WebDataSource; | 152 using blink::WebDataSource; |
| 173 using blink::WebDocument; | 153 using blink::WebDocument; |
| 174 using blink::WebLocalFrame; | 154 using blink::WebLocalFrame; |
| 175 using blink::WebPlugin; | 155 using blink::WebPlugin; |
| 176 using blink::WebPluginParams; | 156 using blink::WebPluginParams; |
| 177 using blink::WebSecurityOrigin; | 157 using blink::WebSecurityOrigin; |
| 178 using blink::WebSecurityPolicy; | 158 using blink::WebSecurityPolicy; |
| 179 using blink::WebString; | 159 using blink::WebString; |
| 180 using blink::WebURL; | 160 using blink::WebURL; |
| 181 using blink::WebURLError; | 161 using blink::WebURLError; |
| 182 using blink::WebURLRequest; | 162 using blink::WebURLRequest; |
| 183 using blink::WebURLResponse; | 163 using blink::WebURLResponse; |
| 184 using blink::WebVector; | 164 using blink::WebVector; |
| 165 using content::PluginInstanceThrottler; |
| 166 using content::RenderFrame; |
| 167 using content::RenderThread; |
| 168 using content::WebPluginInfo; |
| 169 using extensions::Extension; |
| 185 | 170 |
| 186 namespace { | 171 namespace { |
| 187 | 172 |
| 188 ChromeContentRendererClient* g_current_client; | |
| 189 | |
| 190 // Whitelist PPAPI for Android Runtime for Chromium. (See crbug.com/383937) | 173 // Whitelist PPAPI for Android Runtime for Chromium. (See crbug.com/383937) |
| 191 #if defined(ENABLE_PLUGINS) | 174 #if defined(ENABLE_PLUGINS) |
| 192 const char* const kPredefinedAllowedCameraDeviceOrigins[] = { | 175 const char* const kPredefinedAllowedCameraDeviceOrigins[] = { |
| 193 "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", | 176 "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", |
| 194 "4EB74897CB187C7633357C2FE832E0AD6A44883A" | 177 "4EB74897CB187C7633357C2FE832E0AD6A44883A" |
| 195 }; | 178 }; |
| 196 | 179 |
| 197 const char* const kPredefinedAllowedCompositorOrigins[] = { | 180 const char* const kPredefinedAllowedCompositorOrigins[] = { |
| 198 "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", | 181 "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", |
| 199 "4EB74897CB187C7633357C2FE832E0AD6A44883A" | 182 "4EB74897CB187C7633357C2FE832E0AD6A44883A" |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 }; | 249 }; |
| 267 | 250 |
| 268 bool SpellCheckReplacer::Visit(content::RenderView* render_view) { | 251 bool SpellCheckReplacer::Visit(content::RenderView* render_view) { |
| 269 SpellCheckProvider* provider = SpellCheckProvider::Get(render_view); | 252 SpellCheckProvider* provider = SpellCheckProvider::Get(render_view); |
| 270 DCHECK(provider); | 253 DCHECK(provider); |
| 271 provider->set_spellcheck(spellcheck_); | 254 provider->set_spellcheck(spellcheck_); |
| 272 return true; | 255 return true; |
| 273 } | 256 } |
| 274 #endif | 257 #endif |
| 275 | 258 |
| 276 #if defined(ENABLE_EXTENSIONS) | |
| 277 void IsGuestViewApiAvailableToScriptContext( | |
| 278 bool* api_is_available, | |
| 279 extensions::ScriptContext* context) { | |
| 280 if (context->GetAvailability("guestViewInternal").is_available()) { | |
| 281 *api_is_available = true; | |
| 282 } | |
| 283 } | |
| 284 #endif | |
| 285 | |
| 286 #if defined(ENABLE_PLUGINS) | 259 #if defined(ENABLE_PLUGINS) |
| 287 // Presence of the poster param within plugin object tags. | 260 // Presence of the poster param within plugin object tags. |
| 288 // These numeric values are used in UMA logs; do not change them. | 261 // These numeric values are used in UMA logs; do not change them. |
| 289 enum PosterParamPresence { | 262 enum PosterParamPresence { |
| 290 POSTER_PRESENCE_NO_PARAM_PPS_DISABLED = 0, | 263 POSTER_PRESENCE_NO_PARAM_PPS_DISABLED = 0, |
| 291 POSTER_PRESENCE_NO_PARAM_PPS_ENABLED = 1, | 264 POSTER_PRESENCE_NO_PARAM_PPS_ENABLED = 1, |
| 292 POSTER_PRESENCE_PARAM_EXISTS_PPS_DISABLED = 2, | 265 POSTER_PRESENCE_PARAM_EXISTS_PPS_DISABLED = 2, |
| 293 POSTER_PRESENCE_PARAM_EXISTS_PPS_ENABLED = 3, | 266 POSTER_PRESENCE_PARAM_EXISTS_PPS_ENABLED = 3, |
| 294 POSTER_PRESENCE_NUM_ITEMS | 267 POSTER_PRESENCE_NUM_ITEMS |
| 295 }; | 268 }; |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 362 } | 335 } |
| 363 | 336 |
| 364 const base::Closure continue_loading_cb_; | 337 const base::Closure continue_loading_cb_; |
| 365 | 338 |
| 366 DISALLOW_COPY_AND_ASSIGN(MediaLoadDeferrer); | 339 DISALLOW_COPY_AND_ASSIGN(MediaLoadDeferrer); |
| 367 }; | 340 }; |
| 368 | 341 |
| 369 } // namespace | 342 } // namespace |
| 370 | 343 |
| 371 ChromeContentRendererClient::ChromeContentRendererClient() { | 344 ChromeContentRendererClient::ChromeContentRendererClient() { |
| 372 g_current_client = this; | |
| 373 | |
| 374 #if defined(ENABLE_EXTENSIONS) | 345 #if defined(ENABLE_EXTENSIONS) |
| 375 extensions::ExtensionsClient::Set( | 346 extensions::ExtensionsClient::Set( |
| 376 extensions::ChromeExtensionsClient::GetInstance()); | 347 extensions::ChromeExtensionsClient::GetInstance()); |
| 377 extensions::ExtensionsRendererClient::Set( | 348 extensions::ExtensionsRendererClient::Set( |
| 378 ChromeExtensionsRendererClient::GetInstance()); | 349 ChromeExtensionsRendererClient::GetInstance()); |
| 379 #endif | 350 #endif |
| 380 #if defined(ENABLE_PLUGINS) | 351 #if defined(ENABLE_PLUGINS) |
| 381 for (size_t i = 0; i < arraysize(kPredefinedAllowedCameraDeviceOrigins); ++i) | 352 for (size_t i = 0; i < arraysize(kPredefinedAllowedCameraDeviceOrigins); ++i) |
| 382 allowed_camera_device_origins_.insert( | 353 allowed_camera_device_origins_.insert( |
| 383 kPredefinedAllowedCameraDeviceOrigins[i]); | 354 kPredefinedAllowedCameraDeviceOrigins[i]); |
| 384 for (size_t i = 0; i < arraysize(kPredefinedAllowedCompositorOrigins); ++i) | 355 for (size_t i = 0; i < arraysize(kPredefinedAllowedCompositorOrigins); ++i) |
| 385 allowed_compositor_origins_.insert(kPredefinedAllowedCompositorOrigins[i]); | 356 allowed_compositor_origins_.insert(kPredefinedAllowedCompositorOrigins[i]); |
| 386 #endif | 357 #endif |
| 387 } | 358 } |
| 388 | 359 |
| 389 ChromeContentRendererClient::~ChromeContentRendererClient() { | 360 ChromeContentRendererClient::~ChromeContentRendererClient() { |
| 390 g_current_client = NULL; | |
| 391 } | 361 } |
| 392 | 362 |
| 393 void ChromeContentRendererClient::RenderThreadStarted() { | 363 void ChromeContentRendererClient::RenderThreadStarted() { |
| 394 RenderThread* thread = RenderThread::Get(); | 364 RenderThread* thread = RenderThread::Get(); |
| 395 | 365 |
| 396 chrome_observer_.reset(new ChromeRenderProcessObserver()); | 366 chrome_observer_.reset(new ChromeRenderProcessObserver()); |
| 397 web_cache_observer_.reset(new web_cache::WebCacheRenderProcessObserver()); | 367 web_cache_observer_.reset(new web_cache::WebCacheRenderProcessObserver()); |
| 398 | 368 |
| 399 #if defined(ENABLE_EXTENSIONS) | 369 #if defined(ENABLE_EXTENSIONS) |
| 400 extension_dispatcher_delegate_.reset( | 370 ChromeExtensionsRendererClient::GetInstance()->RenderThreadStarted(); |
| 401 new ChromeExtensionsDispatcherDelegate()); | |
| 402 // ChromeRenderViewTest::SetUp() creates its own ExtensionDispatcher and | |
| 403 // injects it using SetExtensionDispatcher(). Don't overwrite it. | |
| 404 if (!extension_dispatcher_) { | |
| 405 extension_dispatcher_.reset( | |
| 406 new extensions::Dispatcher(extension_dispatcher_delegate_.get())); | |
| 407 } | |
| 408 permissions_policy_delegate_.reset( | |
| 409 new extensions::RendererPermissionsPolicyDelegate( | |
| 410 extension_dispatcher_.get())); | |
| 411 resource_request_policy_.reset( | |
| 412 new extensions::ResourceRequestPolicy(extension_dispatcher_.get())); | |
| 413 guest_view_container_dispatcher_.reset( | |
| 414 new extensions::ExtensionsGuestViewContainerDispatcher()); | |
| 415 #endif | 371 #endif |
| 416 | 372 |
| 417 prescient_networking_dispatcher_.reset( | 373 prescient_networking_dispatcher_.reset( |
| 418 new network_hints::PrescientNetworkingDispatcher()); | 374 new network_hints::PrescientNetworkingDispatcher()); |
| 419 #if defined(ENABLE_SPELLCHECK) | 375 #if defined(ENABLE_SPELLCHECK) |
| 420 // ChromeRenderViewTest::SetUp() creates a Spellcheck and injects it using | 376 // ChromeRenderViewTest::SetUp() creates a Spellcheck and injects it using |
| 421 // SetSpellcheck(). Don't overwrite it. | 377 // SetSpellcheck(). Don't overwrite it. |
| 422 if (!spellcheck_) { | 378 if (!spellcheck_) { |
| 423 spellcheck_.reset(new SpellCheck()); | 379 spellcheck_.reset(new SpellCheck()); |
| 424 thread->AddObserver(spellcheck_.get()); | 380 thread->AddObserver(spellcheck_.get()); |
| 425 } | 381 } |
| 426 #endif | 382 #endif |
| 427 visited_link_slave_.reset(new visitedlink::VisitedLinkSlave()); | 383 visited_link_slave_.reset(new visitedlink::VisitedLinkSlave()); |
| 428 #if defined(FULL_SAFE_BROWSING) | 384 #if defined(FULL_SAFE_BROWSING) |
| 429 phishing_classifier_.reset(safe_browsing::PhishingClassifierFilter::Create()); | 385 phishing_classifier_.reset(safe_browsing::PhishingClassifierFilter::Create()); |
| 430 #endif | 386 #endif |
| 431 prerender_dispatcher_.reset(new prerender::PrerenderDispatcher()); | 387 prerender_dispatcher_.reset(new prerender::PrerenderDispatcher()); |
| 432 #if defined(ENABLE_WEBRTC) | 388 #if defined(ENABLE_WEBRTC) |
| 433 webrtc_logging_message_filter_ = new WebRtcLoggingMessageFilter( | 389 webrtc_logging_message_filter_ = new WebRtcLoggingMessageFilter( |
| 434 RenderThread::Get()->GetIOMessageLoopProxy()); | 390 thread->GetIOMessageLoopProxy()); |
| 435 #endif | 391 #endif |
| 436 | 392 |
| 437 thread->AddObserver(chrome_observer_.get()); | 393 thread->AddObserver(chrome_observer_.get()); |
| 438 thread->AddObserver(web_cache_observer_.get()); | 394 thread->AddObserver(web_cache_observer_.get()); |
| 439 #if defined(ENABLE_EXTENSIONS) | |
| 440 thread->AddObserver(extension_dispatcher_.get()); | |
| 441 thread->AddObserver(guest_view_container_dispatcher_.get()); | |
| 442 #endif | |
| 443 #if defined(FULL_SAFE_BROWSING) | 395 #if defined(FULL_SAFE_BROWSING) |
| 444 thread->AddObserver(phishing_classifier_.get()); | 396 thread->AddObserver(phishing_classifier_.get()); |
| 445 #endif | 397 #endif |
| 446 thread->AddObserver(visited_link_slave_.get()); | 398 thread->AddObserver(visited_link_slave_.get()); |
| 447 thread->AddObserver(prerender_dispatcher_.get()); | 399 thread->AddObserver(prerender_dispatcher_.get()); |
| 448 thread->AddObserver(SearchBouncer::GetInstance()); | 400 thread->AddObserver(SearchBouncer::GetInstance()); |
| 449 | 401 |
| 450 #if defined(ENABLE_WEBRTC) | 402 #if defined(ENABLE_WEBRTC) |
| 451 thread->AddFilter(webrtc_logging_message_filter_.get()); | 403 thread->AddFilter(webrtc_logging_message_filter_.get()); |
| 452 #endif | 404 #endif |
| 453 #if defined(ENABLE_EXTENSIONS) | |
| 454 thread->AddFilter(new CastIPCDispatcher( | |
| 455 RenderThread::Get()->GetIOMessageLoopProxy())); | |
| 456 #endif | |
| 457 | 405 |
| 458 thread->RegisterExtension(extensions_v8::ExternalExtension::Get()); | 406 thread->RegisterExtension(extensions_v8::ExternalExtension::Get()); |
| 459 thread->RegisterExtension(extensions_v8::LoadTimesExtension::Get()); | 407 thread->RegisterExtension(extensions_v8::LoadTimesExtension::Get()); |
| 460 | 408 |
| 461 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); | 409 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
| 462 if (command_line->HasSwitch(switches::kEnableBenchmarking)) | 410 if (command_line->HasSwitch(switches::kEnableBenchmarking)) |
| 463 thread->RegisterExtension(extensions_v8::BenchmarkingExtension::Get()); | 411 thread->RegisterExtension(extensions_v8::BenchmarkingExtension::Get()); |
| 464 if (command_line->HasSwitch(switches::kEnableNetBenchmarking)) | 412 if (command_line->HasSwitch(switches::kEnableNetBenchmarking)) |
| 465 thread->RegisterExtension(extensions_v8::NetBenchmarkingExtension::Get()); | 413 thread->RegisterExtension(extensions_v8::NetBenchmarkingExtension::Get()); |
| 466 if (command_line->HasSwitch(switches::kInstantProcess)) | 414 if (command_line->HasSwitch(switches::kInstantProcess)) |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 521 | 469 |
| 522 void ChromeContentRendererClient::RenderFrameCreated( | 470 void ChromeContentRendererClient::RenderFrameCreated( |
| 523 content::RenderFrame* render_frame) { | 471 content::RenderFrame* render_frame) { |
| 524 new ChromeRenderFrameObserver(render_frame); | 472 new ChromeRenderFrameObserver(render_frame); |
| 525 | 473 |
| 526 bool should_whitelist_for_content_settings = | 474 bool should_whitelist_for_content_settings = |
| 527 base::CommandLine::ForCurrentProcess()->HasSwitch( | 475 base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 528 switches::kInstantProcess); | 476 switches::kInstantProcess); |
| 529 extensions::Dispatcher* ext_dispatcher = NULL; | 477 extensions::Dispatcher* ext_dispatcher = NULL; |
| 530 #if defined(ENABLE_EXTENSIONS) | 478 #if defined(ENABLE_EXTENSIONS) |
| 531 ext_dispatcher = extension_dispatcher_.get(); | 479 ext_dispatcher = |
| 480 ChromeExtensionsRendererClient::GetInstance()->extension_dispatcher(); |
| 532 #endif | 481 #endif |
| 533 ContentSettingsObserver* content_settings = new ContentSettingsObserver( | 482 ContentSettingsObserver* content_settings = new ContentSettingsObserver( |
| 534 render_frame, ext_dispatcher, should_whitelist_for_content_settings); | 483 render_frame, ext_dispatcher, should_whitelist_for_content_settings); |
| 535 if (chrome_observer_.get()) { | 484 if (chrome_observer_.get()) { |
| 536 content_settings->SetContentSettingRules( | 485 content_settings->SetContentSettingRules( |
| 537 chrome_observer_->content_setting_rules()); | 486 chrome_observer_->content_setting_rules()); |
| 538 } | 487 } |
| 539 | 488 |
| 540 #if defined(ENABLE_EXTENSIONS) | 489 #if defined(ENABLE_EXTENSIONS) |
| 541 new extensions::ExtensionsRenderFrameObserver(render_frame); | 490 ChromeExtensionsRendererClient::GetInstance()->RenderFrameCreated( |
| 542 new extensions::ExtensionFrameHelper(render_frame, ext_dispatcher); | 491 render_frame); |
| 543 ext_dispatcher->OnRenderFrameCreated(render_frame); | |
| 544 #endif | 492 #endif |
| 545 | 493 |
| 546 #if defined(ENABLE_PLUGINS) | 494 #if defined(ENABLE_PLUGINS) |
| 547 new PepperHelper(render_frame); | 495 new PepperHelper(render_frame); |
| 548 #endif | 496 #endif |
| 549 | 497 |
| 550 #if !defined(DISABLE_NACL) | 498 #if !defined(DISABLE_NACL) |
| 551 new nacl::NaClHelper(render_frame); | 499 new nacl::NaClHelper(render_frame); |
| 552 #endif | 500 #endif |
| 553 | 501 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 575 PasswordAutofillAgent* password_autofill_agent = | 523 PasswordAutofillAgent* password_autofill_agent = |
| 576 new PasswordAutofillAgent(render_frame); | 524 new PasswordAutofillAgent(render_frame); |
| 577 PasswordGenerationAgent* password_generation_agent = | 525 PasswordGenerationAgent* password_generation_agent = |
| 578 new PasswordGenerationAgent(render_frame, password_autofill_agent); | 526 new PasswordGenerationAgent(render_frame, password_autofill_agent); |
| 579 new AutofillAgent(render_frame, password_autofill_agent, | 527 new AutofillAgent(render_frame, password_autofill_agent, |
| 580 password_generation_agent); | 528 password_generation_agent); |
| 581 } | 529 } |
| 582 | 530 |
| 583 void ChromeContentRendererClient::RenderViewCreated( | 531 void ChromeContentRendererClient::RenderViewCreated( |
| 584 content::RenderView* render_view) { | 532 content::RenderView* render_view) { |
| 585 | |
| 586 #if defined(ENABLE_EXTENSIONS) | 533 #if defined(ENABLE_EXTENSIONS) |
| 587 new extensions::ExtensionHelper(render_view, extension_dispatcher_.get()); | 534 ChromeExtensionsRendererClient::GetInstance()->RenderViewCreated(render_view); |
| 588 #endif | 535 #endif |
| 589 new PageLoadHistograms(render_view); | 536 new PageLoadHistograms(render_view); |
| 590 #if defined(ENABLE_PRINTING) | 537 #if defined(ENABLE_PRINTING) |
| 591 new printing::PrintWebViewHelper( | 538 new printing::PrintWebViewHelper( |
| 592 render_view, | 539 render_view, |
| 593 scoped_ptr<printing::PrintWebViewHelper::Delegate>( | 540 scoped_ptr<printing::PrintWebViewHelper::Delegate>( |
| 594 new ChromePrintWebViewHelperDelegate())); | 541 new ChromePrintWebViewHelperDelegate())); |
| 595 #endif | 542 #endif |
| 596 #if defined(ENABLE_SPELLCHECK) | 543 #if defined(ENABLE_SPELLCHECK) |
| 597 new SpellCheckProvider(render_view, spellcheck_.get()); | 544 new SpellCheckProvider(render_view, spellcheck_.get()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 614 SkBitmap* ChromeContentRendererClient::GetSadPluginBitmap() { | 561 SkBitmap* ChromeContentRendererClient::GetSadPluginBitmap() { |
| 615 return const_cast<SkBitmap*>(ResourceBundle::GetSharedInstance(). | 562 return const_cast<SkBitmap*>(ResourceBundle::GetSharedInstance(). |
| 616 GetImageNamed(IDR_SAD_PLUGIN).ToSkBitmap()); | 563 GetImageNamed(IDR_SAD_PLUGIN).ToSkBitmap()); |
| 617 } | 564 } |
| 618 | 565 |
| 619 SkBitmap* ChromeContentRendererClient::GetSadWebViewBitmap() { | 566 SkBitmap* ChromeContentRendererClient::GetSadWebViewBitmap() { |
| 620 return const_cast<SkBitmap*>(ResourceBundle::GetSharedInstance(). | 567 return const_cast<SkBitmap*>(ResourceBundle::GetSharedInstance(). |
| 621 GetImageNamed(IDR_SAD_WEBVIEW).ToSkBitmap()); | 568 GetImageNamed(IDR_SAD_WEBVIEW).ToSkBitmap()); |
| 622 } | 569 } |
| 623 | 570 |
| 624 #if defined(ENABLE_EXTENSIONS) | |
| 625 const Extension* ChromeContentRendererClient::GetExtensionByOrigin( | |
| 626 const WebSecurityOrigin& origin) const { | |
| 627 if (!base::EqualsASCII(base::StringPiece16(origin.protocol()), | |
| 628 extensions::kExtensionScheme)) | |
| 629 return NULL; | |
| 630 | |
| 631 const std::string extension_id = origin.host().utf8().data(); | |
| 632 return extensions::RendererExtensionRegistry::Get()->GetByID(extension_id); | |
| 633 } | |
| 634 #endif | |
| 635 | |
| 636 bool ChromeContentRendererClient::OverrideCreatePlugin( | 571 bool ChromeContentRendererClient::OverrideCreatePlugin( |
| 637 content::RenderFrame* render_frame, | 572 content::RenderFrame* render_frame, |
| 638 blink::WebLocalFrame* frame, | 573 blink::WebLocalFrame* frame, |
| 639 const WebPluginParams& params, | 574 const WebPluginParams& params, |
| 640 WebPlugin** plugin) { | 575 WebPlugin** plugin) { |
| 641 std::string orig_mime_type = params.mimeType.utf8(); | 576 std::string orig_mime_type = params.mimeType.utf8(); |
| 642 #if defined(ENABLE_EXTENSIONS) | 577 #if defined(ENABLE_EXTENSIONS) |
| 643 if (orig_mime_type == content::kBrowserPluginMimeType) { | 578 if (!ChromeExtensionsRendererClient::GetInstance()->OverrideCreatePlugin( |
| 644 bool guest_view_api_available = false; | 579 render_frame, params)) { |
| 645 extension_dispatcher_->script_context_set().ForEach( | 580 return false; |
| 646 render_frame, base::Bind(&IsGuestViewApiAvailableToScriptContext, | |
| 647 &guest_view_api_available)); | |
| 648 if (guest_view_api_available) | |
| 649 return false; | |
| 650 } | 581 } |
| 651 #endif | 582 #endif |
| 652 | 583 |
| 653 GURL url(params.url); | 584 GURL url(params.url); |
| 654 #if defined(ENABLE_PLUGINS) | 585 #if defined(ENABLE_PLUGINS) |
| 655 ChromeViewHostMsg_GetPluginInfo_Output output; | 586 ChromeViewHostMsg_GetPluginInfo_Output output; |
| 656 WebString top_origin = frame->top()->securityOrigin().toString(); | 587 WebString top_origin = frame->top()->securityOrigin().toString(); |
| 657 render_frame->Send(new ChromeViewHostMsg_GetPluginInfo( | 588 render_frame->Send(new ChromeViewHostMsg_GetPluginInfo( |
| 658 render_frame->GetRoutingID(), url, GURL(top_origin), orig_mime_type, | 589 render_frame->GetRoutingID(), url, GURL(top_origin), orig_mime_type, |
| 659 &output)); | 590 &output)); |
| (...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1183 AllowTimerSuspensionWhenProcessBackgrounded() { | 1114 AllowTimerSuspensionWhenProcessBackgrounded() { |
| 1184 #if defined(OS_ANDROID) | 1115 #if defined(OS_ANDROID) |
| 1185 return true; | 1116 return true; |
| 1186 #else | 1117 #else |
| 1187 return false; | 1118 return false; |
| 1188 #endif | 1119 #endif |
| 1189 } | 1120 } |
| 1190 | 1121 |
| 1191 bool ChromeContentRendererClient::AllowPopup() { | 1122 bool ChromeContentRendererClient::AllowPopup() { |
| 1192 #if defined(ENABLE_EXTENSIONS) | 1123 #if defined(ENABLE_EXTENSIONS) |
| 1193 extensions::ScriptContext* current_context = | 1124 return ChromeExtensionsRendererClient::GetInstance()->AllowPopup(); |
| 1194 extension_dispatcher_->script_context_set().GetCurrent(); | 1125 #else |
| 1195 if (!current_context || !current_context->extension()) | 1126 return false; |
| 1196 return false; | |
| 1197 // See http://crbug.com/117446 for the subtlety of this check. | |
| 1198 switch (current_context->context_type()) { | |
| 1199 case extensions::Feature::UNSPECIFIED_CONTEXT: | |
| 1200 case extensions::Feature::WEB_PAGE_CONTEXT: | |
| 1201 case extensions::Feature::UNBLESSED_EXTENSION_CONTEXT: | |
| 1202 case extensions::Feature::WEBUI_CONTEXT: | |
| 1203 case extensions::Feature::SERVICE_WORKER_CONTEXT: | |
| 1204 return false; | |
| 1205 case extensions::Feature::BLESSED_EXTENSION_CONTEXT: | |
| 1206 case extensions::Feature::CONTENT_SCRIPT_CONTEXT: | |
| 1207 return true; | |
| 1208 case extensions::Feature::BLESSED_WEB_PAGE_CONTEXT: | |
| 1209 return !current_context->web_frame()->parent(); | |
| 1210 } | |
| 1211 NOTREACHED(); | |
| 1212 #endif | 1127 #endif |
| 1213 return false; | |
| 1214 } | 1128 } |
| 1215 | 1129 |
| 1216 bool ChromeContentRendererClient::ShouldFork(blink::WebLocalFrame* frame, | 1130 bool ChromeContentRendererClient::ShouldFork(blink::WebLocalFrame* frame, |
| 1217 const GURL& url, | 1131 const GURL& url, |
| 1218 const std::string& http_method, | 1132 const std::string& http_method, |
| 1219 bool is_initial_navigation, | 1133 bool is_initial_navigation, |
| 1220 bool is_server_redirect, | 1134 bool is_server_redirect, |
| 1221 bool* send_referrer) { | 1135 bool* send_referrer) { |
| 1222 DCHECK(!frame->parent()); | 1136 DCHECK(!frame->parent()); |
| 1223 | 1137 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1244 // to swap in the prerendered page on the browser process. If the prerendered | 1158 // to swap in the prerendered page on the browser process. If the prerendered |
| 1245 // page no longer exists by the time the OpenURL IPC is handled, a normal | 1159 // page no longer exists by the time the OpenURL IPC is handled, a normal |
| 1246 // navigation is attempted. | 1160 // navigation is attempted. |
| 1247 if (prerender_dispatcher_.get() && | 1161 if (prerender_dispatcher_.get() && |
| 1248 prerender_dispatcher_->IsPrerenderURL(url)) { | 1162 prerender_dispatcher_->IsPrerenderURL(url)) { |
| 1249 *send_referrer = true; | 1163 *send_referrer = true; |
| 1250 return true; | 1164 return true; |
| 1251 } | 1165 } |
| 1252 | 1166 |
| 1253 #if defined(ENABLE_EXTENSIONS) | 1167 #if defined(ENABLE_EXTENSIONS) |
| 1254 const extensions::RendererExtensionRegistry* extension_registry = | 1168 bool should_fork = ChromeExtensionsRendererClient::ShouldFork( |
| 1255 extensions::RendererExtensionRegistry::Get(); | 1169 frame, url, is_initial_navigation, is_server_redirect, send_referrer); |
| 1256 | 1170 if (should_fork) |
| 1257 // Determine if the new URL is an extension (excluding bookmark apps). | |
| 1258 const Extension* new_url_extension = extensions::GetNonBookmarkAppExtension( | |
| 1259 *extension_registry->GetMainThreadExtensionSet(), url); | |
| 1260 bool is_extension_url = !!new_url_extension; | |
| 1261 | |
| 1262 // If the navigation would cross an app extent boundary, we also need | |
| 1263 // to defer to the browser to ensure process isolation. This is not necessary | |
| 1264 // for server redirects, which will be transferred to a new process by the | |
| 1265 // browser process when they are ready to commit. It is necessary for client | |
| 1266 // redirects, which won't be transferred in the same way. | |
| 1267 if (!is_server_redirect && | |
| 1268 CrossesExtensionExtents(frame, url, is_extension_url, | |
| 1269 is_initial_navigation)) { | |
| 1270 // Include the referrer in this case since we're going from a hosted web | |
| 1271 // page. (the packaged case is handled previously by the extension | |
| 1272 // navigation test) | |
| 1273 *send_referrer = true; | |
| 1274 | |
| 1275 const Extension* extension = | |
| 1276 extension_registry->GetExtensionOrAppByURL(url); | |
| 1277 if (extension && extension->is_app()) { | |
| 1278 extensions::RecordAppLaunchType( | |
| 1279 extension_misc::APP_LAUNCH_CONTENT_NAVIGATION, extension->GetType()); | |
| 1280 } | |
| 1281 return true; | 1171 return true; |
| 1282 } | |
| 1283 | |
| 1284 // If this is a reload, check whether it has the wrong process type. We | |
| 1285 // should send it to the browser if it's an extension URL (e.g., hosted app) | |
| 1286 // in a normal process, or if it's a process for an extension that has been | |
| 1287 // uninstalled. Without --site-per-process mode, we never fork processes for | |
| 1288 // subframes, so this check only makes sense for top-level frames. | |
| 1289 // TODO(alexmos,nasko): Figure out how this check should work when reloading | |
| 1290 // subframes in --site-per-process mode. | |
| 1291 if (!frame->parent() && frame->document().url() == url) { | |
| 1292 if (is_extension_url != IsStandaloneExtensionProcess()) | |
| 1293 return true; | |
| 1294 } | |
| 1295 #endif // defined(ENABLE_EXTENSIONS) | 1172 #endif // defined(ENABLE_EXTENSIONS) |
| 1296 | 1173 |
| 1297 return false; | 1174 return false; |
| 1298 } | 1175 } |
| 1299 | 1176 |
| 1300 bool ChromeContentRendererClient::WillSendRequest( | 1177 bool ChromeContentRendererClient::WillSendRequest( |
| 1301 blink::WebFrame* frame, | 1178 blink::WebFrame* frame, |
| 1302 ui::PageTransition transition_type, | 1179 ui::PageTransition transition_type, |
| 1303 const GURL& url, | 1180 const GURL& url, |
| 1304 const GURL& first_party_for_cookies, | 1181 const GURL& first_party_for_cookies, |
| 1305 GURL* new_url) { | 1182 GURL* new_url) { |
| 1306 // Check whether the request should be allowed. If not allowed, we reset the | 1183 // Check whether the request should be allowed. If not allowed, we reset the |
| 1307 // URL to something invalid to prevent the request and cause an error. | 1184 // URL to something invalid to prevent the request and cause an error. |
| 1308 #if defined(ENABLE_EXTENSIONS) | 1185 #if defined(ENABLE_EXTENSIONS) |
| 1309 if (url.SchemeIs(extensions::kExtensionScheme) && | 1186 if (ChromeExtensionsRendererClient::GetInstance()->WillSendRequest( |
| 1310 !resource_request_policy_->CanRequestResource(url, frame, | 1187 frame, transition_type, url, new_url)) { |
| 1311 transition_type)) { | |
| 1312 *new_url = GURL(chrome::kExtensionInvalidRequestURL); | |
| 1313 return true; | |
| 1314 } | |
| 1315 | |
| 1316 if (url.SchemeIs(extensions::kExtensionResourceScheme) && | |
| 1317 !resource_request_policy_->CanRequestExtensionResourceScheme(url, | |
| 1318 frame)) { | |
| 1319 *new_url = GURL(chrome::kExtensionResourceInvalidRequestURL); | |
| 1320 return true; | 1188 return true; |
| 1321 } | 1189 } |
| 1322 #endif | 1190 #endif |
| 1323 | 1191 |
| 1324 const content::RenderView* render_view = | 1192 const content::RenderView* render_view = |
| 1325 content::RenderView::FromWebView(frame->view()); | 1193 content::RenderView::FromWebView(frame->view()); |
| 1326 SearchBox* search_box = SearchBox::Get(render_view); | 1194 SearchBox* search_box = SearchBox::Get(render_view); |
| 1327 if (search_box && url.SchemeIs(chrome::kChromeSearchScheme)) { | 1195 if (search_box && url.SchemeIs(chrome::kChromeSearchScheme)) { |
| 1328 SearchBox::ImageSourceType type = SearchBox::NONE; | 1196 SearchBox::ImageSourceType type = SearchBox::NONE; |
| 1329 if (url.host() == chrome::kChromeUIFaviconHost) | 1197 if (url.host() == chrome::kChromeUIFaviconHost) |
| 1330 type = SearchBox::FAVICON; | 1198 type = SearchBox::FAVICON; |
| 1331 else if (url.host() == chrome::kChromeUILargeIconHost) | 1199 else if (url.host() == chrome::kChromeUILargeIconHost) |
| 1332 type = SearchBox::LARGE_ICON; | 1200 type = SearchBox::LARGE_ICON; |
| 1333 else if (url.host() == chrome::kChromeUIFallbackIconHost) | 1201 else if (url.host() == chrome::kChromeUIFallbackIconHost) |
| 1334 type = SearchBox::FALLBACK_ICON; | 1202 type = SearchBox::FALLBACK_ICON; |
| 1335 else if (url.host() == chrome::kChromeUIThumbnailHost) | 1203 else if (url.host() == chrome::kChromeUIThumbnailHost) |
| 1336 type = SearchBox::THUMB; | 1204 type = SearchBox::THUMB; |
| 1205 |
| 1337 if (type != SearchBox::NONE) | 1206 if (type != SearchBox::NONE) |
| 1338 return search_box->GenerateImageURLFromTransientURL(url, type, new_url); | 1207 return search_box->GenerateImageURLFromTransientURL(url, type, new_url); |
| 1339 } | 1208 } |
| 1340 | 1209 |
| 1341 return false; | 1210 return false; |
| 1342 } | 1211 } |
| 1343 | 1212 |
| 1344 unsigned long long ChromeContentRendererClient::VisitedLinkHash( | 1213 unsigned long long ChromeContentRendererClient::VisitedLinkHash( |
| 1345 const char* canonical_url, size_t length) { | 1214 const char* canonical_url, size_t length) { |
| 1346 return visited_link_slave_->ComputeURLFingerprint(canonical_url, length); | 1215 return visited_link_slave_->ComputeURLFingerprint(canonical_url, length); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1358 bool ChromeContentRendererClient::ShouldOverridePageVisibilityState( | 1227 bool ChromeContentRendererClient::ShouldOverridePageVisibilityState( |
| 1359 const content::RenderFrame* render_frame, | 1228 const content::RenderFrame* render_frame, |
| 1360 blink::WebPageVisibilityState* override_state) { | 1229 blink::WebPageVisibilityState* override_state) { |
| 1361 if (!prerender::PrerenderHelper::IsPrerendering(render_frame)) | 1230 if (!prerender::PrerenderHelper::IsPrerendering(render_frame)) |
| 1362 return false; | 1231 return false; |
| 1363 | 1232 |
| 1364 *override_state = blink::WebPageVisibilityStatePrerender; | 1233 *override_state = blink::WebPageVisibilityStatePrerender; |
| 1365 return true; | 1234 return true; |
| 1366 } | 1235 } |
| 1367 | 1236 |
| 1368 #if defined(ENABLE_EXTENSIONS) | |
| 1369 void ChromeContentRendererClient::SetExtensionDispatcherForTest( | |
| 1370 extensions::Dispatcher* extension_dispatcher) { | |
| 1371 extension_dispatcher_.reset(extension_dispatcher); | |
| 1372 permissions_policy_delegate_.reset( | |
| 1373 new extensions::RendererPermissionsPolicyDelegate( | |
| 1374 extension_dispatcher_.get())); | |
| 1375 RenderThread::Get()->RegisterExtension( | |
| 1376 extensions::SafeBuiltins::CreateV8Extension()); | |
| 1377 } | |
| 1378 | |
| 1379 extensions::Dispatcher* | |
| 1380 ChromeContentRendererClient::GetExtensionDispatcherForTest() { | |
| 1381 return extension_dispatcher_.get(); | |
| 1382 } | |
| 1383 | |
| 1384 bool ChromeContentRendererClient::CrossesExtensionExtents( | |
| 1385 blink::WebLocalFrame* frame, | |
| 1386 const GURL& new_url, | |
| 1387 bool is_extension_url, | |
| 1388 bool is_initial_navigation) { | |
| 1389 DCHECK(!frame->parent()); | |
| 1390 GURL old_url(frame->document().url()); | |
| 1391 | |
| 1392 extensions::RendererExtensionRegistry* extension_registry = | |
| 1393 extensions::RendererExtensionRegistry::Get(); | |
| 1394 | |
| 1395 // If old_url is still empty and this is an initial navigation, then this is | |
| 1396 // a window.open operation. We should look at the opener URL. Note that the | |
| 1397 // opener is a local frame in this case. | |
| 1398 if (is_initial_navigation && old_url.is_empty() && frame->opener()) { | |
| 1399 WebLocalFrame* opener_frame = frame->opener()->toWebLocalFrame(); | |
| 1400 | |
| 1401 // If we're about to open a normal web page from a same-origin opener stuck | |
| 1402 // in an extension process, we want to keep it in process to allow the | |
| 1403 // opener to script it. | |
| 1404 WebDocument opener_document = opener_frame->document(); | |
| 1405 WebSecurityOrigin opener_origin = opener_document.securityOrigin(); | |
| 1406 bool opener_is_extension_url = !opener_origin.isUnique() && | |
| 1407 extension_registry->GetExtensionOrAppByURL( | |
| 1408 opener_document.url()) != NULL; | |
| 1409 if (!is_extension_url && | |
| 1410 !opener_is_extension_url && | |
| 1411 IsStandaloneExtensionProcess() && | |
| 1412 opener_origin.canRequest(WebURL(new_url))) | |
| 1413 return false; | |
| 1414 | |
| 1415 // In all other cases, we want to compare against the URL that determines | |
| 1416 // the type of process. In default Chrome, that's the URL of the opener's | |
| 1417 // top frame and not the opener frame itself. In --site-per-process, we | |
| 1418 // can use the opener frame itself. | |
| 1419 // TODO(nick): Either wire this up to SiteIsolationPolicy, or to state on | |
| 1420 // |opener_frame|/its ancestors. | |
| 1421 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | |
| 1422 switches::kSitePerProcess) || | |
| 1423 base::CommandLine::ForCurrentProcess()->HasSwitch( | |
| 1424 switches::kIsolateExtensions)) | |
| 1425 old_url = opener_frame->document().url(); | |
| 1426 else | |
| 1427 old_url = opener_frame->top()->document().url(); | |
| 1428 } | |
| 1429 | |
| 1430 // Only consider keeping non-app URLs in an app process if this window | |
| 1431 // has an opener (in which case it might be an OAuth popup that tries to | |
| 1432 // script an iframe within the app). | |
| 1433 bool should_consider_workaround = !!frame->opener(); | |
| 1434 | |
| 1435 return extensions::CrossesExtensionProcessBoundary( | |
| 1436 *extension_registry->GetMainThreadExtensionSet(), old_url, new_url, | |
| 1437 should_consider_workaround); | |
| 1438 } | |
| 1439 #endif // defined(ENABLE_EXTENSIONS) | |
| 1440 | |
| 1441 #if defined(ENABLE_SPELLCHECK) | 1237 #if defined(ENABLE_SPELLCHECK) |
| 1442 void ChromeContentRendererClient::SetSpellcheck(SpellCheck* spellcheck) { | 1238 void ChromeContentRendererClient::SetSpellcheck(SpellCheck* spellcheck) { |
| 1443 RenderThread* thread = RenderThread::Get(); | 1239 RenderThread* thread = RenderThread::Get(); |
| 1444 if (spellcheck_.get() && thread) | 1240 if (spellcheck_.get() && thread) |
| 1445 thread->RemoveObserver(spellcheck_.get()); | 1241 thread->RemoveObserver(spellcheck_.get()); |
| 1446 spellcheck_.reset(spellcheck); | 1242 spellcheck_.reset(spellcheck); |
| 1447 SpellCheckReplacer replacer(spellcheck_.get()); | 1243 SpellCheckReplacer replacer(spellcheck_.get()); |
| 1448 content::RenderView::ForEach(&replacer); | 1244 content::RenderView::ForEach(&replacer); |
| 1449 if (thread) | 1245 if (thread) |
| 1450 thread->AddObserver(spellcheck_.get()); | 1246 thread->AddObserver(spellcheck_.get()); |
| 1451 } | 1247 } |
| 1452 #endif | 1248 #endif |
| 1453 | 1249 |
| 1454 // static | |
| 1455 bool ChromeContentRendererClient::WasWebRequestUsedBySomeExtensions() { | |
| 1456 #if defined(ENABLE_EXTENSIONS) | |
| 1457 return g_current_client->extension_dispatcher_ | |
| 1458 ->WasWebRequestUsedBySomeExtensions(); | |
| 1459 #else | |
| 1460 return false; | |
| 1461 #endif | |
| 1462 } | |
| 1463 | |
| 1464 const void* ChromeContentRendererClient::CreatePPAPIInterface( | 1250 const void* ChromeContentRendererClient::CreatePPAPIInterface( |
| 1465 const std::string& interface_name) { | 1251 const std::string& interface_name) { |
| 1466 #if defined(ENABLE_PLUGINS) && !defined(DISABLE_NACL) | 1252 #if defined(ENABLE_PLUGINS) && !defined(DISABLE_NACL) |
| 1467 if (interface_name == PPB_NACL_PRIVATE_INTERFACE) | 1253 if (interface_name == PPB_NACL_PRIVATE_INTERFACE) |
| 1468 return nacl::GetNaClPrivateInterface(); | 1254 return nacl::GetNaClPrivateInterface(); |
| 1469 #endif | 1255 #endif |
| 1470 return NULL; | 1256 return NULL; |
| 1471 } | 1257 } |
| 1472 | 1258 |
| 1473 bool ChromeContentRendererClient::IsExternalPepperPlugin( | 1259 bool ChromeContentRendererClient::IsExternalPepperPlugin( |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1603 return false; | 1389 return false; |
| 1604 #endif | 1390 #endif |
| 1605 } | 1391 } |
| 1606 | 1392 |
| 1607 content::BrowserPluginDelegate* | 1393 content::BrowserPluginDelegate* |
| 1608 ChromeContentRendererClient::CreateBrowserPluginDelegate( | 1394 ChromeContentRendererClient::CreateBrowserPluginDelegate( |
| 1609 content::RenderFrame* render_frame, | 1395 content::RenderFrame* render_frame, |
| 1610 const std::string& mime_type, | 1396 const std::string& mime_type, |
| 1611 const GURL& original_url) { | 1397 const GURL& original_url) { |
| 1612 #if defined(ENABLE_EXTENSIONS) | 1398 #if defined(ENABLE_EXTENSIONS) |
| 1613 if (mime_type == content::kBrowserPluginMimeType) { | 1399 return ChromeExtensionsRendererClient::CreateBrowserPluginDelegate( |
| 1614 return new extensions::ExtensionsGuestViewContainer(render_frame); | 1400 render_frame, mime_type, original_url); |
| 1615 } else { | |
| 1616 return new extensions::MimeHandlerViewContainer( | |
| 1617 render_frame, mime_type, original_url); | |
| 1618 } | |
| 1619 #else | 1401 #else |
| 1620 return NULL; | 1402 return nullptr; |
| 1621 #endif | 1403 #endif |
| 1622 } | 1404 } |
| 1623 | 1405 |
| 1624 void ChromeContentRendererClient::RecordRappor(const std::string& metric, | 1406 void ChromeContentRendererClient::RecordRappor(const std::string& metric, |
| 1625 const std::string& sample) { | 1407 const std::string& sample) { |
| 1626 RenderThread::Get()->Send(new ChromeViewHostMsg_RecordRappor(metric, sample)); | 1408 RenderThread::Get()->Send(new ChromeViewHostMsg_RecordRappor(metric, sample)); |
| 1627 } | 1409 } |
| 1628 | 1410 |
| 1629 void ChromeContentRendererClient::RecordRapporURL(const std::string& metric, | 1411 void ChromeContentRendererClient::RecordRapporURL(const std::string& metric, |
| 1630 const GURL& url) { | 1412 const GURL& url) { |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1676 // chrome.system.network.getNetworkInterfaces provides the same | 1458 // chrome.system.network.getNetworkInterfaces provides the same |
| 1677 // information. Also, the enforcement of sending and binding UDP is already done | 1459 // information. Also, the enforcement of sending and binding UDP is already done |
| 1678 // by chrome extension permission model. | 1460 // by chrome extension permission model. |
| 1679 bool ChromeContentRendererClient::ShouldEnforceWebRTCRoutingPreferences() { | 1461 bool ChromeContentRendererClient::ShouldEnforceWebRTCRoutingPreferences() { |
| 1680 #if defined(ENABLE_EXTENSIONS) | 1462 #if defined(ENABLE_EXTENSIONS) |
| 1681 return !IsStandaloneExtensionProcess(); | 1463 return !IsStandaloneExtensionProcess(); |
| 1682 #else | 1464 #else |
| 1683 return true; | 1465 return true; |
| 1684 #endif | 1466 #endif |
| 1685 } | 1467 } |
| OLD | NEW |