| 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/guest_view_container.h" | 126 #include "extensions/renderer/guest_view/guest_view_container.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 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 640 bool guest_view_api_available = false; | 646 bool guest_view_api_available = false; |
| 641 extension_dispatcher_->script_context_set().ForEach( | 647 extension_dispatcher_->script_context_set().ForEach( |
| 642 render_frame->GetRenderView(), | 648 render_frame->GetRenderView(), |
| 643 base::Bind(&IsGuestViewApiAvailableToScriptContext, | 649 base::Bind(&IsGuestViewApiAvailableToScriptContext, |
| 644 &guest_view_api_available)); | 650 &guest_view_api_available)); |
| 645 if (guest_view_api_available) | 651 if (guest_view_api_available) |
| 646 return false; | 652 return false; |
| 647 } | 653 } |
| 648 #endif | 654 #endif |
| 649 | 655 |
| 656 GURL url(params.url); |
| 657 #if defined(ENABLE_PLUGINS) |
| 650 ChromeViewHostMsg_GetPluginInfo_Output output; | 658 ChromeViewHostMsg_GetPluginInfo_Output output; |
| 651 #if defined(ENABLE_PLUGINS) | |
| 652 render_frame->Send(new ChromeViewHostMsg_GetPluginInfo( | 659 render_frame->Send(new ChromeViewHostMsg_GetPluginInfo( |
| 653 render_frame->GetRoutingID(), GURL(params.url), | 660 render_frame->GetRoutingID(), url, frame->top()->document().url(), |
| 654 frame->top()->document().url(), orig_mime_type, &output)); | 661 orig_mime_type, &output)); |
| 662 *plugin = CreatePlugin(render_frame, frame, params, output); |
| 663 #else // !defined(ENABLE_PLUGINS) |
| 655 | 664 |
| 656 #else | 665 #if defined(OS_ANDROID) |
| 657 output.status = ChromeViewHostMsg_GetPluginInfo_Status::kNotFound; | 666 if (plugins::MobileYouTubePlugin::IsYouTubeURL(url, orig_mime_type)) { |
| 658 #endif | 667 base::StringPiece template_html( |
| 659 *plugin = CreatePlugin(render_frame, frame, params, output); | 668 ResourceBundle::GetSharedInstance().GetRawDataResource( |
| 669 IDR_MOBILE_YOUTUBE_PLUGIN_HTML)); |
| 670 *plugin = (new plugins::MobileYouTubePlugin(render_frame, frame, params, |
| 671 template_html))->plugin(); |
| 672 return true; |
| 673 } |
| 674 #endif // defined(OS_ANDROID) |
| 675 |
| 676 PluginUMAReporter::GetInstance()->ReportPluginMissing(orig_mime_type, url); |
| 677 *plugin = NonLoadablePluginPlaceholder::CreateNotSupportedPlugin( |
| 678 render_frame, frame, params)->plugin(); |
| 679 |
| 680 #endif // defined(ENABLE_PLUGINS) |
| 660 return true; | 681 return true; |
| 661 } | 682 } |
| 662 | 683 |
| 663 WebPlugin* ChromeContentRendererClient::CreatePluginReplacement( | 684 WebPlugin* ChromeContentRendererClient::CreatePluginReplacement( |
| 664 content::RenderFrame* render_frame, | 685 content::RenderFrame* render_frame, |
| 665 const base::FilePath& plugin_path) { | 686 const base::FilePath& plugin_path) { |
| 666 ChromePluginPlaceholder* placeholder = | 687 return NonLoadablePluginPlaceholder::CreateErrorPlugin(render_frame, |
| 667 ChromePluginPlaceholder::CreateErrorPlugin(render_frame, plugin_path); | 688 plugin_path)->plugin(); |
| 668 return placeholder->plugin(); | |
| 669 } | 689 } |
| 670 | 690 |
| 671 void ChromeContentRendererClient::DeferMediaLoad( | 691 void ChromeContentRendererClient::DeferMediaLoad( |
| 672 content::RenderFrame* render_frame, | 692 content::RenderFrame* render_frame, |
| 673 const base::Closure& closure) { | 693 const base::Closure& closure) { |
| 674 #if defined(OS_ANDROID) | 694 #if defined(OS_ANDROID) |
| 675 // Chromium for Android doesn't support prerender yet. | 695 // Chromium for Android doesn't support prerender yet. |
| 676 closure.Run(); | 696 closure.Run(); |
| 677 return; | 697 return; |
| 678 #else | 698 #else |
| 679 if (!prerender::PrerenderHelper::IsPrerendering(render_frame)) { | 699 if (!prerender::PrerenderHelper::IsPrerendering(render_frame)) { |
| 680 closure.Run(); | 700 closure.Run(); |
| 681 return; | 701 return; |
| 682 } | 702 } |
| 683 | 703 |
| 684 // Lifetime is tied to |render_frame| via content::RenderFrameObserver. | 704 // Lifetime is tied to |render_frame| via content::RenderFrameObserver. |
| 685 new prerender::PrerenderMediaLoadDeferrer(render_frame, closure); | 705 new prerender::PrerenderMediaLoadDeferrer(render_frame, closure); |
| 686 #endif | 706 #endif |
| 687 } | 707 } |
| 688 | 708 |
| 709 #if defined(ENABLE_PLUGINS) |
| 689 WebPlugin* ChromeContentRendererClient::CreatePlugin( | 710 WebPlugin* ChromeContentRendererClient::CreatePlugin( |
| 690 content::RenderFrame* render_frame, | 711 content::RenderFrame* render_frame, |
| 691 blink::WebLocalFrame* frame, | 712 blink::WebLocalFrame* frame, |
| 692 const WebPluginParams& original_params, | 713 const WebPluginParams& original_params, |
| 693 const ChromeViewHostMsg_GetPluginInfo_Output& output) { | 714 const ChromeViewHostMsg_GetPluginInfo_Output& output) { |
| 694 const WebPluginInfo& info = output.plugin; | 715 const WebPluginInfo& info = output.plugin; |
| 695 const std::string& actual_mime_type = output.actual_mime_type; | 716 const std::string& actual_mime_type = output.actual_mime_type; |
| 696 const base::string16& group_name = output.group_name; | 717 const base::string16& group_name = output.group_name; |
| 697 const std::string& identifier = output.group_identifier; | 718 const std::string& identifier = output.group_identifier; |
| 698 ChromeViewHostMsg_GetPluginInfo_Status status = output.status; | 719 ChromeViewHostMsg_GetPluginInfo_Status status = output.status; |
| 699 GURL url(original_params.url); | 720 GURL url(original_params.url); |
| 700 std::string orig_mime_type = original_params.mimeType.utf8(); | 721 std::string orig_mime_type = original_params.mimeType.utf8(); |
| 701 ChromePluginPlaceholder* placeholder = NULL; | 722 ChromePluginPlaceholder* placeholder = NULL; |
| 702 | 723 |
| 703 // If the browser plugin is to be enabled, this should be handled by the | 724 // If the browser plugin is to be enabled, this should be handled by the |
| 704 // renderer, so the code won't reach here due to the early exit in | 725 // renderer, so the code won't reach here due to the early exit in |
| 705 // OverrideCreatePlugin. | 726 // OverrideCreatePlugin. |
| 706 if (status == ChromeViewHostMsg_GetPluginInfo_Status::kNotFound || | 727 if (status == ChromeViewHostMsg_GetPluginInfo_Status::kNotFound || |
| 707 orig_mime_type == content::kBrowserPluginMimeType) { | 728 orig_mime_type == content::kBrowserPluginMimeType) { |
| 708 #if defined(OS_ANDROID) | |
| 709 if (plugins::MobileYouTubePlugin::IsYouTubeURL(url, orig_mime_type)) { | |
| 710 base::StringPiece template_html( | |
| 711 ResourceBundle::GetSharedInstance().GetRawDataResource( | |
| 712 IDR_MOBILE_YOUTUBE_PLUGIN_HTML)); | |
| 713 return (new plugins::MobileYouTubePlugin( | |
| 714 render_frame, | |
| 715 frame, | |
| 716 original_params, | |
| 717 template_html, | |
| 718 GURL(ChromePluginPlaceholder::kPluginPlaceholderDataURL))) | |
| 719 ->plugin(); | |
| 720 } | |
| 721 #endif | |
| 722 PluginUMAReporter::GetInstance()->ReportPluginMissing(orig_mime_type, url); | 729 PluginUMAReporter::GetInstance()->ReportPluginMissing(orig_mime_type, url); |
| 723 placeholder = ChromePluginPlaceholder::CreateMissingPlugin( | 730 placeholder = ChromePluginPlaceholder::CreateLoadableMissingPlugin( |
| 724 render_frame, frame, original_params); | 731 render_frame, frame, original_params); |
| 725 } else { | 732 } else { |
| 726 // TODO(bauerb): This should be in content/. | 733 // TODO(bauerb): This should be in content/. |
| 727 WebPluginParams params(original_params); | 734 WebPluginParams params(original_params); |
| 728 for (size_t i = 0; i < info.mime_types.size(); ++i) { | 735 for (size_t i = 0; i < info.mime_types.size(); ++i) { |
| 729 if (info.mime_types[i].mime_type == actual_mime_type) { | 736 if (info.mime_types[i].mime_type == actual_mime_type) { |
| 730 AppendParams(info.mime_types[i].additional_param_names, | 737 AppendParams(info.mime_types[i].additional_param_names, |
| 731 info.mime_types[i].additional_param_values, | 738 info.mime_types[i].additional_param_values, |
| 732 ¶ms.attributeNames, ¶ms.attributeValues); | 739 ¶ms.attributeNames, ¶ms.attributeValues); |
| 733 break; | 740 break; |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 836 #if defined(OS_CHROMEOS) | 843 #if defined(OS_CHROMEOS) |
| 837 l10n_util::GetStringUTF16(IDS_NACL_PLUGIN_BLOCKED)); | 844 l10n_util::GetStringUTF16(IDS_NACL_PLUGIN_BLOCKED)); |
| 838 #else | 845 #else |
| 839 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name)); | 846 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name)); |
| 840 #endif | 847 #endif |
| 841 break; | 848 break; |
| 842 } | 849 } |
| 843 } | 850 } |
| 844 #endif // !defined(DISABLE_NACL) && defined(ENABLE_EXTENSIONS) | 851 #endif // !defined(DISABLE_NACL) && defined(ENABLE_EXTENSIONS) |
| 845 | 852 |
| 846 #if defined(ENABLE_PLUGINS) | |
| 847 // Delay loading plugins if prerendering. | 853 // Delay loading plugins if prerendering. |
| 848 // TODO(mmenke): In the case of prerendering, feed into | 854 // TODO(mmenke): In the case of prerendering, feed into |
| 849 // ChromeContentRendererClient::CreatePlugin instead, to | 855 // ChromeContentRendererClient::CreatePlugin instead, to |
| 850 // reduce the chance of future regressions. | 856 // reduce the chance of future regressions. |
| 851 bool is_prerendering = | 857 bool is_prerendering = |
| 852 prerender::PrerenderHelper::IsPrerendering(render_frame); | 858 prerender::PrerenderHelper::IsPrerendering(render_frame); |
| 853 bool power_saver_enabled = | 859 bool power_saver_enabled = |
| 854 status == | 860 status == |
| 855 ChromeViewHostMsg_GetPluginInfo_Status::kPlayImportantContent; | 861 ChromeViewHostMsg_GetPluginInfo_Status::kPlayImportantContent; |
| 856 bool blocked_for_background_tab = | 862 bool blocked_for_background_tab = |
| (...skipping 14 matching lines...) Expand all Loading... |
| 871 placeholder = ChromePluginPlaceholder::CreateBlockedPlugin( | 877 placeholder = ChromePluginPlaceholder::CreateBlockedPlugin( |
| 872 render_frame, frame, params, info, identifier, group_name, | 878 render_frame, frame, params, info, identifier, group_name, |
| 873 poster_info.poster_attribute.empty() ? IDR_BLOCKED_PLUGIN_HTML | 879 poster_info.poster_attribute.empty() ? IDR_BLOCKED_PLUGIN_HTML |
| 874 : IDR_PLUGIN_POSTER_HTML, | 880 : IDR_PLUGIN_POSTER_HTML, |
| 875 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name), | 881 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name), |
| 876 poster_info); | 882 poster_info); |
| 877 placeholder->set_blocked_for_background_tab( | 883 placeholder->set_blocked_for_background_tab( |
| 878 blocked_for_background_tab); | 884 blocked_for_background_tab); |
| 879 placeholder->set_blocked_for_prerendering(is_prerendering); | 885 placeholder->set_blocked_for_prerendering(is_prerendering); |
| 880 placeholder->set_power_saver_enabled(power_saver_enabled); | 886 placeholder->set_power_saver_enabled(power_saver_enabled); |
| 881 placeholder->set_allow_loading(true); | |
| 882 break; | 887 break; |
| 883 } | 888 } |
| 884 | 889 |
| 885 scoped_ptr<content::PluginInstanceThrottler> throttler; | 890 scoped_ptr<content::PluginInstanceThrottler> throttler; |
| 886 if (power_saver_enabled) { | 891 if (power_saver_enabled) { |
| 887 throttler = PluginInstanceThrottler::Create(); | 892 throttler = PluginInstanceThrottler::Create(); |
| 888 // PluginPreroller manages its own lifetime. | 893 // PluginPreroller manages its own lifetime. |
| 889 new PluginPreroller( | 894 new PluginPreroller( |
| 890 render_frame, frame, params, info, identifier, group_name, | 895 render_frame, frame, params, info, identifier, group_name, |
| 891 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name), | 896 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name), |
| 892 throttler.get()); | 897 throttler.get()); |
| 893 } | 898 } |
| 894 | 899 |
| 895 return render_frame->CreatePlugin(frame, info, params, | 900 return render_frame->CreatePlugin(frame, info, params, |
| 896 throttler.Pass()); | 901 throttler.Pass()); |
| 897 #else // !defined(ENABLE_PLUGINS) | |
| 898 return render_frame->CreatePlugin(frame, info, params, nullptr); | |
| 899 #endif // defined(ENABLE_PLUGINS) | |
| 900 } | 902 } |
| 901 case ChromeViewHostMsg_GetPluginInfo_Status::kNPAPINotSupported: { | 903 case ChromeViewHostMsg_GetPluginInfo_Status::kNPAPINotSupported: { |
| 902 RenderThread::Get()->RecordAction( | 904 RenderThread::Get()->RecordAction( |
| 903 UserMetricsAction("Plugin_NPAPINotSupported")); | 905 UserMetricsAction("Plugin_NPAPINotSupported")); |
| 904 placeholder = create_blocked_plugin( | 906 placeholder = create_blocked_plugin( |
| 905 IDR_BLOCKED_PLUGIN_HTML, | 907 IDR_BLOCKED_PLUGIN_HTML, |
| 906 l10n_util::GetStringUTF16(IDS_PLUGIN_NOT_SUPPORTED_METRO)); | 908 l10n_util::GetStringUTF16(IDS_PLUGIN_NOT_SUPPORTED_METRO)); |
| 907 render_frame->Send(new ChromeViewHostMsg_NPAPINotSupported( | 909 render_frame->Send(new ChromeViewHostMsg_NPAPINotSupported( |
| 908 render_frame->GetRoutingID(), identifier)); | 910 render_frame->GetRoutingID(), identifier)); |
| 909 break; | 911 break; |
| 910 } | 912 } |
| 911 case ChromeViewHostMsg_GetPluginInfo_Status::kDisabled: { | 913 case ChromeViewHostMsg_GetPluginInfo_Status::kDisabled: { |
| 912 PluginUMAReporter::GetInstance()->ReportPluginDisabled(orig_mime_type, | 914 PluginUMAReporter::GetInstance()->ReportPluginDisabled(orig_mime_type, |
| 913 url); | 915 url); |
| 914 placeholder = create_blocked_plugin( | 916 placeholder = create_blocked_plugin( |
| 915 IDR_DISABLED_PLUGIN_HTML, | 917 IDR_DISABLED_PLUGIN_HTML, |
| 916 l10n_util::GetStringFUTF16(IDS_PLUGIN_DISABLED, group_name)); | 918 l10n_util::GetStringFUTF16(IDS_PLUGIN_DISABLED, group_name)); |
| 917 break; | 919 break; |
| 918 } | 920 } |
| 919 case ChromeViewHostMsg_GetPluginInfo_Status::kOutdatedBlocked: { | 921 case ChromeViewHostMsg_GetPluginInfo_Status::kOutdatedBlocked: { |
| 920 #if defined(ENABLE_PLUGIN_INSTALLATION) | 922 #if defined(ENABLE_PLUGIN_INSTALLATION) |
| 921 placeholder = create_blocked_plugin( | 923 placeholder = create_blocked_plugin( |
| 922 IDR_BLOCKED_PLUGIN_HTML, | 924 IDR_BLOCKED_PLUGIN_HTML, |
| 923 l10n_util::GetStringFUTF16(IDS_PLUGIN_OUTDATED, group_name)); | 925 l10n_util::GetStringFUTF16(IDS_PLUGIN_OUTDATED, group_name)); |
| 924 placeholder->set_allow_loading(true); | |
| 925 render_frame->Send(new ChromeViewHostMsg_BlockedOutdatedPlugin( | 926 render_frame->Send(new ChromeViewHostMsg_BlockedOutdatedPlugin( |
| 926 render_frame->GetRoutingID(), placeholder->CreateRoutingId(), | 927 render_frame->GetRoutingID(), placeholder->CreateRoutingId(), |
| 927 identifier)); | 928 identifier)); |
| 928 #else | 929 #else |
| 929 NOTREACHED(); | 930 NOTREACHED(); |
| 930 #endif | 931 #endif |
| 931 break; | 932 break; |
| 932 } | 933 } |
| 933 case ChromeViewHostMsg_GetPluginInfo_Status::kOutdatedDisallowed: { | 934 case ChromeViewHostMsg_GetPluginInfo_Status::kOutdatedDisallowed: { |
| 934 placeholder = create_blocked_plugin( | 935 placeholder = create_blocked_plugin( |
| 935 IDR_BLOCKED_PLUGIN_HTML, | 936 IDR_BLOCKED_PLUGIN_HTML, |
| 936 l10n_util::GetStringFUTF16(IDS_PLUGIN_OUTDATED, group_name)); | 937 l10n_util::GetStringFUTF16(IDS_PLUGIN_OUTDATED, group_name)); |
| 937 break; | 938 break; |
| 938 } | 939 } |
| 939 case ChromeViewHostMsg_GetPluginInfo_Status::kUnauthorized: { | 940 case ChromeViewHostMsg_GetPluginInfo_Status::kUnauthorized: { |
| 940 placeholder = create_blocked_plugin( | 941 placeholder = create_blocked_plugin( |
| 941 IDR_BLOCKED_PLUGIN_HTML, | 942 IDR_BLOCKED_PLUGIN_HTML, |
| 942 l10n_util::GetStringFUTF16(IDS_PLUGIN_NOT_AUTHORIZED, group_name)); | 943 l10n_util::GetStringFUTF16(IDS_PLUGIN_NOT_AUTHORIZED, group_name)); |
| 943 placeholder->set_allow_loading(true); | |
| 944 if (info.type != content::WebPluginInfo::PLUGIN_TYPE_NPAPI) { | 944 if (info.type != content::WebPluginInfo::PLUGIN_TYPE_NPAPI) { |
| 945 render_frame->Send(new ChromeViewHostMsg_BlockedUnauthorizedPlugin( | 945 render_frame->Send(new ChromeViewHostMsg_BlockedUnauthorizedPlugin( |
| 946 render_frame->GetRoutingID(), | 946 render_frame->GetRoutingID(), |
| 947 group_name, | 947 group_name, |
| 948 identifier)); | 948 identifier)); |
| 949 } | 949 } |
| 950 observer->DidBlockContentType(content_type, group_name); | 950 observer->DidBlockContentType(content_type, group_name); |
| 951 break; | 951 break; |
| 952 } | 952 } |
| 953 case ChromeViewHostMsg_GetPluginInfo_Status::kBlocked: { | 953 case ChromeViewHostMsg_GetPluginInfo_Status::kBlocked: { |
| 954 placeholder = create_blocked_plugin( | 954 placeholder = create_blocked_plugin( |
| 955 IDR_BLOCKED_PLUGIN_HTML, | 955 IDR_BLOCKED_PLUGIN_HTML, |
| 956 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name)); | 956 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name)); |
| 957 placeholder->set_allow_loading(true); | |
| 958 RenderThread::Get()->RecordAction(UserMetricsAction("Plugin_Blocked")); | 957 RenderThread::Get()->RecordAction(UserMetricsAction("Plugin_Blocked")); |
| 959 observer->DidBlockContentType(content_type, group_name); | 958 observer->DidBlockContentType(content_type, group_name); |
| 960 break; | 959 break; |
| 961 } | 960 } |
| 962 case ChromeViewHostMsg_GetPluginInfo_Status::kBlockedByPolicy: { | 961 case ChromeViewHostMsg_GetPluginInfo_Status::kBlockedByPolicy: { |
| 963 placeholder = create_blocked_plugin( | 962 placeholder = create_blocked_plugin( |
| 964 IDR_BLOCKED_PLUGIN_HTML, | 963 IDR_BLOCKED_PLUGIN_HTML, |
| 965 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED_BY_POLICY, | 964 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED_BY_POLICY, |
| 966 group_name)); | 965 group_name)); |
| 967 placeholder->set_allow_loading(false); | 966 placeholder->DisallowLoading(); |
| 968 RenderThread::Get()->RecordAction( | 967 RenderThread::Get()->RecordAction( |
| 969 UserMetricsAction("Plugin_BlockedByPolicy")); | 968 UserMetricsAction("Plugin_BlockedByPolicy")); |
| 970 observer->DidBlockContentType(content_type, group_name); | 969 observer->DidBlockContentType(content_type, group_name); |
| 971 break; | 970 break; |
| 972 } | 971 } |
| 973 } | 972 } |
| 974 } | 973 } |
| 975 placeholder->SetStatus(status); | 974 placeholder->SetStatus(status); |
| 976 return placeholder->plugin(); | 975 return placeholder->plugin(); |
| 977 } | 976 } |
| 977 #endif // defined(ENABLE_PLUGINS) |
| 978 | 978 |
| 979 // For NaCl content handling plugins, the NaCl manifest is stored in an | 979 // For NaCl content handling plugins, the NaCl manifest is stored in an |
| 980 // additonal 'nacl' param associated with the MIME type. | 980 // additonal 'nacl' param associated with the MIME type. |
| 981 // static | 981 // static |
| 982 GURL ChromeContentRendererClient::GetNaClContentHandlerURL( | 982 GURL ChromeContentRendererClient::GetNaClContentHandlerURL( |
| 983 const std::string& actual_mime_type, | 983 const std::string& actual_mime_type, |
| 984 const content::WebPluginInfo& plugin) { | 984 const content::WebPluginInfo& plugin) { |
| 985 // Look for the manifest URL among the MIME type's additonal parameters. | 985 // Look for the manifest URL among the MIME type's additonal parameters. |
| 986 const char kNaClPluginManifestAttribute[] = "nacl"; | 986 const char kNaClPluginManifestAttribute[] = "nacl"; |
| 987 base::string16 nacl_attr = ASCIIToUTF16(kNaClPluginManifestAttribute); | 987 base::string16 nacl_attr = ASCIIToUTF16(kNaClPluginManifestAttribute); |
| (...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1653 WebString header_key(ASCIIToUTF16( | 1653 WebString header_key(ASCIIToUTF16( |
| 1654 data_reduction_proxy::chrome_proxy_header())); | 1654 data_reduction_proxy::chrome_proxy_header())); |
| 1655 if (!response.httpHeaderField(header_key).isNull() && | 1655 if (!response.httpHeaderField(header_key).isNull() && |
| 1656 response.httpHeaderField(header_key).utf8().find( | 1656 response.httpHeaderField(header_key).utf8().find( |
| 1657 data_reduction_proxy::chrome_proxy_lo_fi_directive()) != | 1657 data_reduction_proxy::chrome_proxy_lo_fi_directive()) != |
| 1658 std::string::npos) { | 1658 std::string::npos) { |
| 1659 (*properties)[data_reduction_proxy::chrome_proxy_header()] = | 1659 (*properties)[data_reduction_proxy::chrome_proxy_header()] = |
| 1660 data_reduction_proxy::chrome_proxy_lo_fi_directive(); | 1660 data_reduction_proxy::chrome_proxy_lo_fi_directive(); |
| 1661 } | 1661 } |
| 1662 } | 1662 } |
| OLD | NEW |