| 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" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 #include "chrome/renderer/chrome_render_process_observer.h" | 33 #include "chrome/renderer/chrome_render_process_observer.h" |
| 34 #include "chrome/renderer/chrome_render_view_observer.h" | 34 #include "chrome/renderer/chrome_render_view_observer.h" |
| 35 #include "chrome/renderer/content_settings_observer.h" | 35 #include "chrome/renderer/content_settings_observer.h" |
| 36 #include "chrome/renderer/external_extension.h" | 36 #include "chrome/renderer/external_extension.h" |
| 37 #include "chrome/renderer/loadtimes_extension_bindings.h" | 37 #include "chrome/renderer/loadtimes_extension_bindings.h" |
| 38 #include "chrome/renderer/media/chrome_key_systems.h" | 38 #include "chrome/renderer/media/chrome_key_systems.h" |
| 39 #include "chrome/renderer/net/net_error_helper.h" | 39 #include "chrome/renderer/net/net_error_helper.h" |
| 40 #include "chrome/renderer/net_benchmarking_extension.h" | 40 #include "chrome/renderer/net_benchmarking_extension.h" |
| 41 #include "chrome/renderer/page_load_histograms.h" | 41 #include "chrome/renderer/page_load_histograms.h" |
| 42 #include "chrome/renderer/pepper/pepper_helper.h" | 42 #include "chrome/renderer/pepper/pepper_helper.h" |
| 43 #include "chrome/renderer/plugins/chrome_plugin_placeholder.h" | 43 #include "chrome/renderer/plugins/non_loadable_plugin_placeholder.h" |
| 44 #include "chrome/renderer/plugins/plugin_preroller.h" | 44 #include "chrome/renderer/plugins/plugin_preroller.h" |
| 45 #include "chrome/renderer/plugins/plugin_uma.h" | 45 #include "chrome/renderer/plugins/plugin_uma.h" |
| 46 #include "chrome/renderer/plugins/shadow_dom_plugin_placeholder.h" | 46 #include "chrome/renderer/plugins/shadow_dom_plugin_placeholder.h" |
| 47 #include "chrome/renderer/prerender/prerender_dispatcher.h" | 47 #include "chrome/renderer/prerender/prerender_dispatcher.h" |
| 48 #include "chrome/renderer/prerender/prerender_helper.h" | 48 #include "chrome/renderer/prerender/prerender_helper.h" |
| 49 #include "chrome/renderer/prerender/prerender_media_load_deferrer.h" | 49 #include "chrome/renderer/prerender/prerender_media_load_deferrer.h" |
| 50 #include "chrome/renderer/prerender/prerenderer_client.h" | 50 #include "chrome/renderer/prerender/prerenderer_client.h" |
| 51 #include "chrome/renderer/safe_browsing/malware_dom_details.h" | 51 #include "chrome/renderer/safe_browsing/malware_dom_details.h" |
| 52 #include "chrome/renderer/safe_browsing/phishing_classifier_delegate.h" | 52 #include "chrome/renderer/safe_browsing/phishing_classifier_delegate.h" |
| 53 #include "chrome/renderer/searchbox/search_bouncer.h" | 53 #include "chrome/renderer/searchbox/search_bouncer.h" |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 #include "extensions/renderer/guest_view/extensions_guest_view_container.h" | 125 #include "extensions/renderer/guest_view/extensions_guest_view_container.h" |
| 126 #include "extensions/renderer/guest_view/extensions_guest_view_container_dispatc
her.h" | 126 #include "extensions/renderer/guest_view/extensions_guest_view_container_dispatc
her.h" |
| 127 #include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_con
tainer.h" | 127 #include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_con
tainer.h" |
| 128 #include "extensions/renderer/script_context.h" | 128 #include "extensions/renderer/script_context.h" |
| 129 #endif | 129 #endif |
| 130 | 130 |
| 131 #if defined(ENABLE_IPC_FUZZER) | 131 #if defined(ENABLE_IPC_FUZZER) |
| 132 #include "chrome/common/external_ipc_dumper.h" | 132 #include "chrome/common/external_ipc_dumper.h" |
| 133 #endif | 133 #endif |
| 134 | 134 |
| 135 #if defined(ENABLE_PLUGINS) |
| 136 #include "chrome/renderer/plugins/chrome_plugin_placeholder.h" |
| 137 #endif |
| 138 |
| 135 #if defined(ENABLE_PRINTING) | 139 #if defined(ENABLE_PRINTING) |
| 136 #include "chrome/renderer/printing/chrome_print_web_view_helper_delegate.h" | 140 #include "chrome/renderer/printing/chrome_print_web_view_helper_delegate.h" |
| 137 #include "components/printing/renderer/print_web_view_helper.h" | 141 #include "components/printing/renderer/print_web_view_helper.h" |
| 138 #endif | 142 #endif |
| 139 | 143 |
| 140 #if defined(ENABLE_PRINT_PREVIEW) | 144 #if defined(ENABLE_PRINT_PREVIEW) |
| 141 #include "chrome/renderer/pepper/chrome_pdf_print_client.h" | 145 #include "chrome/renderer/pepper/chrome_pdf_print_client.h" |
| 142 #endif | 146 #endif |
| 143 | 147 |
| 144 #if defined(ENABLE_SPELLCHECK) | 148 #if defined(ENABLE_SPELLCHECK) |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", | 193 "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", |
| 190 "4EB74897CB187C7633357C2FE832E0AD6A44883A" | 194 "4EB74897CB187C7633357C2FE832E0AD6A44883A" |
| 191 }; | 195 }; |
| 192 | 196 |
| 193 const char* const kPredefinedAllowedCompositorOrigins[] = { | 197 const char* const kPredefinedAllowedCompositorOrigins[] = { |
| 194 "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", | 198 "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", |
| 195 "4EB74897CB187C7633357C2FE832E0AD6A44883A" | 199 "4EB74897CB187C7633357C2FE832E0AD6A44883A" |
| 196 }; | 200 }; |
| 197 #endif | 201 #endif |
| 198 | 202 |
| 203 #if defined(ENABLE_PLUGINS) |
| 199 void AppendParams(const std::vector<base::string16>& additional_names, | 204 void AppendParams(const std::vector<base::string16>& additional_names, |
| 200 const std::vector<base::string16>& additional_values, | 205 const std::vector<base::string16>& additional_values, |
| 201 WebVector<WebString>* existing_names, | 206 WebVector<WebString>* existing_names, |
| 202 WebVector<WebString>* existing_values) { | 207 WebVector<WebString>* existing_values) { |
| 203 DCHECK(additional_names.size() == additional_values.size()); | 208 DCHECK(additional_names.size() == additional_values.size()); |
| 204 DCHECK(existing_names->size() == existing_values->size()); | 209 DCHECK(existing_names->size() == existing_values->size()); |
| 205 | 210 |
| 206 size_t existing_size = existing_names->size(); | 211 size_t existing_size = existing_names->size(); |
| 207 size_t total_size = existing_size + additional_names.size(); | 212 size_t total_size = existing_size + additional_names.size(); |
| 208 | 213 |
| 209 WebVector<WebString> names(total_size); | 214 WebVector<WebString> names(total_size); |
| 210 WebVector<WebString> values(total_size); | 215 WebVector<WebString> values(total_size); |
| 211 | 216 |
| 212 for (size_t i = 0; i < existing_size; ++i) { | 217 for (size_t i = 0; i < existing_size; ++i) { |
| 213 names[i] = (*existing_names)[i]; | 218 names[i] = (*existing_names)[i]; |
| 214 values[i] = (*existing_values)[i]; | 219 values[i] = (*existing_values)[i]; |
| 215 } | 220 } |
| 216 | 221 |
| 217 for (size_t i = 0; i < additional_names.size(); ++i) { | 222 for (size_t i = 0; i < additional_names.size(); ++i) { |
| 218 names[existing_size + i] = additional_names[i]; | 223 names[existing_size + i] = additional_names[i]; |
| 219 values[existing_size + i] = additional_values[i]; | 224 values[existing_size + i] = additional_values[i]; |
| 220 } | 225 } |
| 221 | 226 |
| 222 existing_names->swap(names); | 227 existing_names->swap(names); |
| 223 existing_values->swap(values); | 228 existing_values->swap(values); |
| 224 } | 229 } |
| 225 | 230 |
| 226 #if defined(ENABLE_SPELLCHECK) | |
| 227 class SpellCheckReplacer : public content::RenderViewVisitor { | |
| 228 public: | |
| 229 explicit SpellCheckReplacer(SpellCheck* spellcheck) | |
| 230 : spellcheck_(spellcheck) {} | |
| 231 bool Visit(content::RenderView* render_view) override; | |
| 232 | |
| 233 private: | |
| 234 SpellCheck* spellcheck_; // New shared spellcheck for all views. Weak Ptr. | |
| 235 DISALLOW_COPY_AND_ASSIGN(SpellCheckReplacer); | |
| 236 }; | |
| 237 | |
| 238 bool SpellCheckReplacer::Visit(content::RenderView* render_view) { | |
| 239 SpellCheckProvider* provider = SpellCheckProvider::Get(render_view); | |
| 240 DCHECK(provider); | |
| 241 provider->set_spellcheck(spellcheck_); | |
| 242 return true; | |
| 243 } | |
| 244 #endif | |
| 245 | |
| 246 // For certain sandboxed Pepper plugins, use the JavaScript Content Settings. | 231 // For certain sandboxed Pepper plugins, use the JavaScript Content Settings. |
| 247 bool ShouldUseJavaScriptSettingForPlugin(const WebPluginInfo& plugin) { | 232 bool ShouldUseJavaScriptSettingForPlugin(const WebPluginInfo& plugin) { |
| 248 if (plugin.type != WebPluginInfo::PLUGIN_TYPE_PEPPER_IN_PROCESS && | 233 if (plugin.type != WebPluginInfo::PLUGIN_TYPE_PEPPER_IN_PROCESS && |
| 249 plugin.type != WebPluginInfo::PLUGIN_TYPE_PEPPER_OUT_OF_PROCESS) { | 234 plugin.type != WebPluginInfo::PLUGIN_TYPE_PEPPER_OUT_OF_PROCESS) { |
| 250 return false; | 235 return false; |
| 251 } | 236 } |
| 252 | 237 |
| 253 #if !defined(DISABLE_NACL) | 238 #if !defined(DISABLE_NACL) |
| 254 // Treat Native Client invocations like JavaScript. | 239 // Treat Native Client invocations like JavaScript. |
| 255 if (plugin.name == ASCIIToUTF16(nacl::kNaClPluginName)) | 240 if (plugin.name == ASCIIToUTF16(nacl::kNaClPluginName)) |
| 256 return true; | 241 return true; |
| 257 #endif | 242 #endif |
| 258 | 243 |
| 259 #if defined(WIDEVINE_CDM_AVAILABLE) && defined(ENABLE_PEPPER_CDMS) | 244 #if defined(WIDEVINE_CDM_AVAILABLE) && defined(ENABLE_PEPPER_CDMS) |
| 260 // Treat CDM invocations like JavaScript. | 245 // Treat CDM invocations like JavaScript. |
| 261 if (plugin.name == ASCIIToUTF16(kWidevineCdmDisplayName)) { | 246 if (plugin.name == ASCIIToUTF16(kWidevineCdmDisplayName)) { |
| 262 DCHECK(plugin.type == WebPluginInfo::PLUGIN_TYPE_PEPPER_OUT_OF_PROCESS); | 247 DCHECK(plugin.type == WebPluginInfo::PLUGIN_TYPE_PEPPER_OUT_OF_PROCESS); |
| 263 return true; | 248 return true; |
| 264 } | 249 } |
| 265 #endif // defined(WIDEVINE_CDM_AVAILABLE) && defined(ENABLE_PEPPER_CDMS) | 250 #endif // defined(WIDEVINE_CDM_AVAILABLE) && defined(ENABLE_PEPPER_CDMS) |
| 266 | 251 |
| 267 return false; | 252 return false; |
| 268 } | 253 } |
| 254 #endif // defined(ENABLE_PLUGINS) |
| 255 |
| 256 #if defined(ENABLE_SPELLCHECK) |
| 257 class SpellCheckReplacer : public content::RenderViewVisitor { |
| 258 public: |
| 259 explicit SpellCheckReplacer(SpellCheck* spellcheck) |
| 260 : spellcheck_(spellcheck) {} |
| 261 bool Visit(content::RenderView* render_view) override; |
| 262 |
| 263 private: |
| 264 SpellCheck* spellcheck_; // New shared spellcheck for all views. Weak Ptr. |
| 265 DISALLOW_COPY_AND_ASSIGN(SpellCheckReplacer); |
| 266 }; |
| 267 |
| 268 bool SpellCheckReplacer::Visit(content::RenderView* render_view) { |
| 269 SpellCheckProvider* provider = SpellCheckProvider::Get(render_view); |
| 270 DCHECK(provider); |
| 271 provider->set_spellcheck(spellcheck_); |
| 272 return true; |
| 273 } |
| 274 #endif |
| 269 | 275 |
| 270 #if defined(ENABLE_EXTENSIONS) | 276 #if defined(ENABLE_EXTENSIONS) |
| 271 void IsGuestViewApiAvailableToScriptContext( | 277 void IsGuestViewApiAvailableToScriptContext( |
| 272 bool* api_is_available, | 278 bool* api_is_available, |
| 273 extensions::ScriptContext* context) { | 279 extensions::ScriptContext* context) { |
| 274 if (context->GetAvailability("guestViewInternal").is_available()) { | 280 if (context->GetAvailability("guestViewInternal").is_available()) { |
| 275 *api_is_available = true; | 281 *api_is_available = true; |
| 276 } | 282 } |
| 277 } | 283 } |
| 278 #endif | 284 #endif |
| (...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 643 bool guest_view_api_available = false; | 649 bool guest_view_api_available = false; |
| 644 extension_dispatcher_->script_context_set().ForEach( | 650 extension_dispatcher_->script_context_set().ForEach( |
| 645 render_frame->GetRenderView(), | 651 render_frame->GetRenderView(), |
| 646 base::Bind(&IsGuestViewApiAvailableToScriptContext, | 652 base::Bind(&IsGuestViewApiAvailableToScriptContext, |
| 647 &guest_view_api_available)); | 653 &guest_view_api_available)); |
| 648 if (guest_view_api_available) | 654 if (guest_view_api_available) |
| 649 return false; | 655 return false; |
| 650 } | 656 } |
| 651 #endif | 657 #endif |
| 652 | 658 |
| 659 GURL url(params.url); |
| 660 #if defined(ENABLE_PLUGINS) |
| 653 ChromeViewHostMsg_GetPluginInfo_Output output; | 661 ChromeViewHostMsg_GetPluginInfo_Output output; |
| 654 #if defined(ENABLE_PLUGINS) | |
| 655 render_frame->Send(new ChromeViewHostMsg_GetPluginInfo( | 662 render_frame->Send(new ChromeViewHostMsg_GetPluginInfo( |
| 656 render_frame->GetRoutingID(), GURL(params.url), | 663 render_frame->GetRoutingID(), url, frame->top()->document().url(), |
| 657 frame->top()->document().url(), orig_mime_type, &output)); | 664 orig_mime_type, &output)); |
| 665 *plugin = CreatePlugin(render_frame, frame, params, output); |
| 666 #else // !defined(ENABLE_PLUGINS) |
| 658 | 667 |
| 659 #else | 668 #if defined(OS_ANDROID) |
| 660 output.status = ChromeViewHostMsg_GetPluginInfo_Status::kNotFound; | 669 if (plugins::MobileYouTubePlugin::IsYouTubeURL(url, orig_mime_type)) { |
| 661 #endif | 670 base::StringPiece template_html( |
| 662 *plugin = CreatePlugin(render_frame, frame, params, output); | 671 ResourceBundle::GetSharedInstance().GetRawDataResource( |
| 672 IDR_MOBILE_YOUTUBE_PLUGIN_HTML)); |
| 673 *plugin = (new plugins::MobileYouTubePlugin(render_frame, frame, params, |
| 674 template_html))->plugin(); |
| 675 return true; |
| 676 } |
| 677 #endif // defined(OS_ANDROID) |
| 678 |
| 679 PluginUMAReporter::GetInstance()->ReportPluginMissing(orig_mime_type, url); |
| 680 *plugin = NonLoadablePluginPlaceholder::CreateNotSupportedPlugin( |
| 681 render_frame, frame, params)->plugin(); |
| 682 |
| 683 #endif // defined(ENABLE_PLUGINS) |
| 663 return true; | 684 return true; |
| 664 } | 685 } |
| 665 | 686 |
| 666 WebPlugin* ChromeContentRendererClient::CreatePluginReplacement( | 687 WebPlugin* ChromeContentRendererClient::CreatePluginReplacement( |
| 667 content::RenderFrame* render_frame, | 688 content::RenderFrame* render_frame, |
| 668 const base::FilePath& plugin_path) { | 689 const base::FilePath& plugin_path) { |
| 669 ChromePluginPlaceholder* placeholder = | 690 return NonLoadablePluginPlaceholder::CreateErrorPlugin(render_frame, |
| 670 ChromePluginPlaceholder::CreateErrorPlugin(render_frame, plugin_path); | 691 plugin_path)->plugin(); |
| 671 return placeholder->plugin(); | |
| 672 } | 692 } |
| 673 | 693 |
| 674 void ChromeContentRendererClient::DeferMediaLoad( | 694 void ChromeContentRendererClient::DeferMediaLoad( |
| 675 content::RenderFrame* render_frame, | 695 content::RenderFrame* render_frame, |
| 676 const base::Closure& closure) { | 696 const base::Closure& closure) { |
| 677 #if defined(OS_ANDROID) | 697 #if defined(OS_ANDROID) |
| 678 // Chromium for Android doesn't support prerender yet. | 698 // Chromium for Android doesn't support prerender yet. |
| 679 closure.Run(); | 699 closure.Run(); |
| 680 return; | 700 return; |
| 681 #else | 701 #else |
| 682 if (!prerender::PrerenderHelper::IsPrerendering(render_frame)) { | 702 if (!prerender::PrerenderHelper::IsPrerendering(render_frame)) { |
| 683 closure.Run(); | 703 closure.Run(); |
| 684 return; | 704 return; |
| 685 } | 705 } |
| 686 | 706 |
| 687 // Lifetime is tied to |render_frame| via content::RenderFrameObserver. | 707 // Lifetime is tied to |render_frame| via content::RenderFrameObserver. |
| 688 new prerender::PrerenderMediaLoadDeferrer(render_frame, closure); | 708 new prerender::PrerenderMediaLoadDeferrer(render_frame, closure); |
| 689 #endif | 709 #endif |
| 690 } | 710 } |
| 691 | 711 |
| 712 #if defined(ENABLE_PLUGINS) |
| 692 WebPlugin* ChromeContentRendererClient::CreatePlugin( | 713 WebPlugin* ChromeContentRendererClient::CreatePlugin( |
| 693 content::RenderFrame* render_frame, | 714 content::RenderFrame* render_frame, |
| 694 blink::WebLocalFrame* frame, | 715 blink::WebLocalFrame* frame, |
| 695 const WebPluginParams& original_params, | 716 const WebPluginParams& original_params, |
| 696 const ChromeViewHostMsg_GetPluginInfo_Output& output) { | 717 const ChromeViewHostMsg_GetPluginInfo_Output& output) { |
| 697 const WebPluginInfo& info = output.plugin; | 718 const WebPluginInfo& info = output.plugin; |
| 698 const std::string& actual_mime_type = output.actual_mime_type; | 719 const std::string& actual_mime_type = output.actual_mime_type; |
| 699 const base::string16& group_name = output.group_name; | 720 const base::string16& group_name = output.group_name; |
| 700 const std::string& identifier = output.group_identifier; | 721 const std::string& identifier = output.group_identifier; |
| 701 ChromeViewHostMsg_GetPluginInfo_Status status = output.status; | 722 ChromeViewHostMsg_GetPluginInfo_Status status = output.status; |
| 702 GURL url(original_params.url); | 723 GURL url(original_params.url); |
| 703 std::string orig_mime_type = original_params.mimeType.utf8(); | 724 std::string orig_mime_type = original_params.mimeType.utf8(); |
| 704 ChromePluginPlaceholder* placeholder = NULL; | 725 ChromePluginPlaceholder* placeholder = NULL; |
| 705 | 726 |
| 706 // If the browser plugin is to be enabled, this should be handled by the | 727 // If the browser plugin is to be enabled, this should be handled by the |
| 707 // renderer, so the code won't reach here due to the early exit in | 728 // renderer, so the code won't reach here due to the early exit in |
| 708 // OverrideCreatePlugin. | 729 // OverrideCreatePlugin. |
| 709 if (status == ChromeViewHostMsg_GetPluginInfo_Status::kNotFound || | 730 if (status == ChromeViewHostMsg_GetPluginInfo_Status::kNotFound || |
| 710 orig_mime_type == content::kBrowserPluginMimeType) { | 731 orig_mime_type == content::kBrowserPluginMimeType) { |
| 711 #if defined(OS_ANDROID) | |
| 712 if (plugins::MobileYouTubePlugin::IsYouTubeURL(url, orig_mime_type)) { | |
| 713 base::StringPiece template_html( | |
| 714 ResourceBundle::GetSharedInstance().GetRawDataResource( | |
| 715 IDR_MOBILE_YOUTUBE_PLUGIN_HTML)); | |
| 716 return (new plugins::MobileYouTubePlugin( | |
| 717 render_frame, | |
| 718 frame, | |
| 719 original_params, | |
| 720 template_html, | |
| 721 GURL(ChromePluginPlaceholder::kPluginPlaceholderDataURL))) | |
| 722 ->plugin(); | |
| 723 } | |
| 724 #endif | |
| 725 PluginUMAReporter::GetInstance()->ReportPluginMissing(orig_mime_type, url); | 732 PluginUMAReporter::GetInstance()->ReportPluginMissing(orig_mime_type, url); |
| 726 placeholder = ChromePluginPlaceholder::CreateMissingPlugin( | 733 placeholder = ChromePluginPlaceholder::CreateLoadableMissingPlugin( |
| 727 render_frame, frame, original_params); | 734 render_frame, frame, original_params); |
| 728 } else { | 735 } else { |
| 729 // TODO(bauerb): This should be in content/. | 736 // TODO(bauerb): This should be in content/. |
| 730 WebPluginParams params(original_params); | 737 WebPluginParams params(original_params); |
| 731 for (size_t i = 0; i < info.mime_types.size(); ++i) { | 738 for (size_t i = 0; i < info.mime_types.size(); ++i) { |
| 732 if (info.mime_types[i].mime_type == actual_mime_type) { | 739 if (info.mime_types[i].mime_type == actual_mime_type) { |
| 733 AppendParams(info.mime_types[i].additional_param_names, | 740 AppendParams(info.mime_types[i].additional_param_names, |
| 734 info.mime_types[i].additional_param_values, | 741 info.mime_types[i].additional_param_values, |
| 735 ¶ms.attributeNames, ¶ms.attributeValues); | 742 ¶ms.attributeNames, ¶ms.attributeValues); |
| 736 break; | 743 break; |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 839 #if defined(OS_CHROMEOS) | 846 #if defined(OS_CHROMEOS) |
| 840 l10n_util::GetStringUTF16(IDS_NACL_PLUGIN_BLOCKED)); | 847 l10n_util::GetStringUTF16(IDS_NACL_PLUGIN_BLOCKED)); |
| 841 #else | 848 #else |
| 842 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name)); | 849 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name)); |
| 843 #endif | 850 #endif |
| 844 break; | 851 break; |
| 845 } | 852 } |
| 846 } | 853 } |
| 847 #endif // !defined(DISABLE_NACL) && defined(ENABLE_EXTENSIONS) | 854 #endif // !defined(DISABLE_NACL) && defined(ENABLE_EXTENSIONS) |
| 848 | 855 |
| 849 #if defined(ENABLE_PLUGINS) | |
| 850 // Delay loading plugins if prerendering. | 856 // Delay loading plugins if prerendering. |
| 851 // TODO(mmenke): In the case of prerendering, feed into | 857 // TODO(mmenke): In the case of prerendering, feed into |
| 852 // ChromeContentRendererClient::CreatePlugin instead, to | 858 // ChromeContentRendererClient::CreatePlugin instead, to |
| 853 // reduce the chance of future regressions. | 859 // reduce the chance of future regressions. |
| 854 bool is_prerendering = | 860 bool is_prerendering = |
| 855 prerender::PrerenderHelper::IsPrerendering(render_frame); | 861 prerender::PrerenderHelper::IsPrerendering(render_frame); |
| 856 bool power_saver_enabled = | 862 bool power_saver_enabled = |
| 857 status == | 863 status == |
| 858 ChromeViewHostMsg_GetPluginInfo_Status::kPlayImportantContent; | 864 ChromeViewHostMsg_GetPluginInfo_Status::kPlayImportantContent; |
| 859 bool blocked_for_background_tab = | 865 bool blocked_for_background_tab = |
| (...skipping 14 matching lines...) Expand all Loading... |
| 874 placeholder = ChromePluginPlaceholder::CreateBlockedPlugin( | 880 placeholder = ChromePluginPlaceholder::CreateBlockedPlugin( |
| 875 render_frame, frame, params, info, identifier, group_name, | 881 render_frame, frame, params, info, identifier, group_name, |
| 876 poster_info.poster_attribute.empty() ? IDR_BLOCKED_PLUGIN_HTML | 882 poster_info.poster_attribute.empty() ? IDR_BLOCKED_PLUGIN_HTML |
| 877 : IDR_PLUGIN_POSTER_HTML, | 883 : IDR_PLUGIN_POSTER_HTML, |
| 878 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name), | 884 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name), |
| 879 poster_info); | 885 poster_info); |
| 880 placeholder->set_blocked_for_background_tab( | 886 placeholder->set_blocked_for_background_tab( |
| 881 blocked_for_background_tab); | 887 blocked_for_background_tab); |
| 882 placeholder->set_blocked_for_prerendering(is_prerendering); | 888 placeholder->set_blocked_for_prerendering(is_prerendering); |
| 883 placeholder->set_power_saver_enabled(power_saver_enabled); | 889 placeholder->set_power_saver_enabled(power_saver_enabled); |
| 884 placeholder->set_allow_loading(true); | |
| 885 break; | 890 break; |
| 886 } | 891 } |
| 887 | 892 |
| 888 scoped_ptr<content::PluginInstanceThrottler> throttler; | 893 scoped_ptr<content::PluginInstanceThrottler> throttler; |
| 889 if (power_saver_enabled) { | 894 if (power_saver_enabled) { |
| 890 throttler = PluginInstanceThrottler::Create(); | 895 throttler = PluginInstanceThrottler::Create(); |
| 891 // PluginPreroller manages its own lifetime. | 896 // PluginPreroller manages its own lifetime. |
| 892 new PluginPreroller( | 897 new PluginPreroller( |
| 893 render_frame, frame, params, info, identifier, group_name, | 898 render_frame, frame, params, info, identifier, group_name, |
| 894 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name), | 899 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name), |
| 895 throttler.get()); | 900 throttler.get()); |
| 896 } | 901 } |
| 897 | 902 |
| 898 return render_frame->CreatePlugin(frame, info, params, | 903 return render_frame->CreatePlugin(frame, info, params, |
| 899 throttler.Pass()); | 904 throttler.Pass()); |
| 900 #else // !defined(ENABLE_PLUGINS) | |
| 901 return render_frame->CreatePlugin(frame, info, params, nullptr); | |
| 902 #endif // defined(ENABLE_PLUGINS) | |
| 903 } | 905 } |
| 904 case ChromeViewHostMsg_GetPluginInfo_Status::kNPAPINotSupported: { | 906 case ChromeViewHostMsg_GetPluginInfo_Status::kNPAPINotSupported: { |
| 905 RenderThread::Get()->RecordAction( | 907 RenderThread::Get()->RecordAction( |
| 906 UserMetricsAction("Plugin_NPAPINotSupported")); | 908 UserMetricsAction("Plugin_NPAPINotSupported")); |
| 907 placeholder = create_blocked_plugin( | 909 placeholder = create_blocked_plugin( |
| 908 IDR_BLOCKED_PLUGIN_HTML, | 910 IDR_BLOCKED_PLUGIN_HTML, |
| 909 l10n_util::GetStringUTF16(IDS_PLUGIN_NOT_SUPPORTED_METRO)); | 911 l10n_util::GetStringUTF16(IDS_PLUGIN_NOT_SUPPORTED_METRO)); |
| 910 render_frame->Send(new ChromeViewHostMsg_NPAPINotSupported( | 912 render_frame->Send(new ChromeViewHostMsg_NPAPINotSupported( |
| 911 render_frame->GetRoutingID(), identifier)); | 913 render_frame->GetRoutingID(), identifier)); |
| 912 break; | 914 break; |
| 913 } | 915 } |
| 914 case ChromeViewHostMsg_GetPluginInfo_Status::kDisabled: { | 916 case ChromeViewHostMsg_GetPluginInfo_Status::kDisabled: { |
| 915 PluginUMAReporter::GetInstance()->ReportPluginDisabled(orig_mime_type, | 917 PluginUMAReporter::GetInstance()->ReportPluginDisabled(orig_mime_type, |
| 916 url); | 918 url); |
| 917 placeholder = create_blocked_plugin( | 919 placeholder = create_blocked_plugin( |
| 918 IDR_DISABLED_PLUGIN_HTML, | 920 IDR_DISABLED_PLUGIN_HTML, |
| 919 l10n_util::GetStringFUTF16(IDS_PLUGIN_DISABLED, group_name)); | 921 l10n_util::GetStringFUTF16(IDS_PLUGIN_DISABLED, group_name)); |
| 920 break; | 922 break; |
| 921 } | 923 } |
| 922 case ChromeViewHostMsg_GetPluginInfo_Status::kOutdatedBlocked: { | 924 case ChromeViewHostMsg_GetPluginInfo_Status::kOutdatedBlocked: { |
| 923 #if defined(ENABLE_PLUGIN_INSTALLATION) | 925 #if defined(ENABLE_PLUGIN_INSTALLATION) |
| 924 placeholder = create_blocked_plugin( | 926 placeholder = create_blocked_plugin( |
| 925 IDR_BLOCKED_PLUGIN_HTML, | 927 IDR_BLOCKED_PLUGIN_HTML, |
| 926 l10n_util::GetStringFUTF16(IDS_PLUGIN_OUTDATED, group_name)); | 928 l10n_util::GetStringFUTF16(IDS_PLUGIN_OUTDATED, group_name)); |
| 927 placeholder->set_allow_loading(true); | |
| 928 render_frame->Send(new ChromeViewHostMsg_BlockedOutdatedPlugin( | 929 render_frame->Send(new ChromeViewHostMsg_BlockedOutdatedPlugin( |
| 929 render_frame->GetRoutingID(), placeholder->CreateRoutingId(), | 930 render_frame->GetRoutingID(), placeholder->CreateRoutingId(), |
| 930 identifier)); | 931 identifier)); |
| 931 #else | 932 #else |
| 932 NOTREACHED(); | 933 NOTREACHED(); |
| 933 #endif | 934 #endif |
| 934 break; | 935 break; |
| 935 } | 936 } |
| 936 case ChromeViewHostMsg_GetPluginInfo_Status::kOutdatedDisallowed: { | 937 case ChromeViewHostMsg_GetPluginInfo_Status::kOutdatedDisallowed: { |
| 937 placeholder = create_blocked_plugin( | 938 placeholder = create_blocked_plugin( |
| 938 IDR_BLOCKED_PLUGIN_HTML, | 939 IDR_BLOCKED_PLUGIN_HTML, |
| 939 l10n_util::GetStringFUTF16(IDS_PLUGIN_OUTDATED, group_name)); | 940 l10n_util::GetStringFUTF16(IDS_PLUGIN_OUTDATED, group_name)); |
| 940 break; | 941 break; |
| 941 } | 942 } |
| 942 case ChromeViewHostMsg_GetPluginInfo_Status::kUnauthorized: { | 943 case ChromeViewHostMsg_GetPluginInfo_Status::kUnauthorized: { |
| 943 placeholder = create_blocked_plugin( | 944 placeholder = create_blocked_plugin( |
| 944 IDR_BLOCKED_PLUGIN_HTML, | 945 IDR_BLOCKED_PLUGIN_HTML, |
| 945 l10n_util::GetStringFUTF16(IDS_PLUGIN_NOT_AUTHORIZED, group_name)); | 946 l10n_util::GetStringFUTF16(IDS_PLUGIN_NOT_AUTHORIZED, group_name)); |
| 946 placeholder->set_allow_loading(true); | |
| 947 if (info.type != content::WebPluginInfo::PLUGIN_TYPE_NPAPI) { | 947 if (info.type != content::WebPluginInfo::PLUGIN_TYPE_NPAPI) { |
| 948 render_frame->Send(new ChromeViewHostMsg_BlockedUnauthorizedPlugin( | 948 render_frame->Send(new ChromeViewHostMsg_BlockedUnauthorizedPlugin( |
| 949 render_frame->GetRoutingID(), | 949 render_frame->GetRoutingID(), |
| 950 group_name, | 950 group_name, |
| 951 identifier)); | 951 identifier)); |
| 952 } | 952 } |
| 953 observer->DidBlockContentType(content_type, group_name); | 953 observer->DidBlockContentType(content_type, group_name); |
| 954 break; | 954 break; |
| 955 } | 955 } |
| 956 case ChromeViewHostMsg_GetPluginInfo_Status::kBlocked: { | 956 case ChromeViewHostMsg_GetPluginInfo_Status::kBlocked: { |
| 957 placeholder = create_blocked_plugin( | 957 placeholder = create_blocked_plugin( |
| 958 IDR_BLOCKED_PLUGIN_HTML, | 958 IDR_BLOCKED_PLUGIN_HTML, |
| 959 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name)); | 959 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name)); |
| 960 placeholder->set_allow_loading(true); | |
| 961 RenderThread::Get()->RecordAction(UserMetricsAction("Plugin_Blocked")); | 960 RenderThread::Get()->RecordAction(UserMetricsAction("Plugin_Blocked")); |
| 962 observer->DidBlockContentType(content_type, group_name); | 961 observer->DidBlockContentType(content_type, group_name); |
| 963 break; | 962 break; |
| 964 } | 963 } |
| 965 case ChromeViewHostMsg_GetPluginInfo_Status::kBlockedByPolicy: { | 964 case ChromeViewHostMsg_GetPluginInfo_Status::kBlockedByPolicy: { |
| 966 placeholder = create_blocked_plugin( | 965 placeholder = create_blocked_plugin( |
| 967 IDR_BLOCKED_PLUGIN_HTML, | 966 IDR_BLOCKED_PLUGIN_HTML, |
| 968 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED_BY_POLICY, | 967 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED_BY_POLICY, |
| 969 group_name)); | 968 group_name)); |
| 970 placeholder->set_allow_loading(false); | 969 placeholder->DisallowLoading(); |
| 971 RenderThread::Get()->RecordAction( | 970 RenderThread::Get()->RecordAction( |
| 972 UserMetricsAction("Plugin_BlockedByPolicy")); | 971 UserMetricsAction("Plugin_BlockedByPolicy")); |
| 973 observer->DidBlockContentType(content_type, group_name); | 972 observer->DidBlockContentType(content_type, group_name); |
| 974 break; | 973 break; |
| 975 } | 974 } |
| 976 } | 975 } |
| 977 } | 976 } |
| 978 placeholder->SetStatus(status); | 977 placeholder->SetStatus(status); |
| 979 return placeholder->plugin(); | 978 return placeholder->plugin(); |
| 980 } | 979 } |
| 980 #endif // defined(ENABLE_PLUGINS) |
| 981 | 981 |
| 982 // For NaCl content handling plugins, the NaCl manifest is stored in an | 982 // For NaCl content handling plugins, the NaCl manifest is stored in an |
| 983 // additonal 'nacl' param associated with the MIME type. | 983 // additonal 'nacl' param associated with the MIME type. |
| 984 // static | 984 // static |
| 985 GURL ChromeContentRendererClient::GetNaClContentHandlerURL( | 985 GURL ChromeContentRendererClient::GetNaClContentHandlerURL( |
| 986 const std::string& actual_mime_type, | 986 const std::string& actual_mime_type, |
| 987 const content::WebPluginInfo& plugin) { | 987 const content::WebPluginInfo& plugin) { |
| 988 // Look for the manifest URL among the MIME type's additonal parameters. | 988 // Look for the manifest URL among the MIME type's additonal parameters. |
| 989 const char kNaClPluginManifestAttribute[] = "nacl"; | 989 const char kNaClPluginManifestAttribute[] = "nacl"; |
| 990 base::string16 nacl_attr = ASCIIToUTF16(kNaClPluginManifestAttribute); | 990 base::string16 nacl_attr = ASCIIToUTF16(kNaClPluginManifestAttribute); |
| (...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1645 WebString header_key(ASCIIToUTF16( | 1645 WebString header_key(ASCIIToUTF16( |
| 1646 data_reduction_proxy::chrome_proxy_header())); | 1646 data_reduction_proxy::chrome_proxy_header())); |
| 1647 if (!response.httpHeaderField(header_key).isNull() && | 1647 if (!response.httpHeaderField(header_key).isNull() && |
| 1648 response.httpHeaderField(header_key).utf8().find( | 1648 response.httpHeaderField(header_key).utf8().find( |
| 1649 data_reduction_proxy::chrome_proxy_lo_fi_directive()) != | 1649 data_reduction_proxy::chrome_proxy_lo_fi_directive()) != |
| 1650 std::string::npos) { | 1650 std::string::npos) { |
| 1651 (*properties)[data_reduction_proxy::chrome_proxy_header()] = | 1651 (*properties)[data_reduction_proxy::chrome_proxy_header()] = |
| 1652 data_reduction_proxy::chrome_proxy_lo_fi_directive(); | 1652 data_reduction_proxy::chrome_proxy_lo_fi_directive(); |
| 1653 } | 1653 } |
| 1654 } | 1654 } |
| OLD | NEW |