Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Side by Side Diff: chrome/renderer/chrome_content_renderer_client.cc

Issue 1069703002: Replace the struct workaround for forward-declaring ChromeViewHostMsg_GetPluginInfo_Status with a p… (Closed) Base URL: https://chromium.googlesource.com/chromium/src@issue444203
Patch Set: update base branch Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 638 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 } 649 }
650 #endif 650 #endif
651 651
652 ChromeViewHostMsg_GetPluginInfo_Output output; 652 ChromeViewHostMsg_GetPluginInfo_Output output;
653 #if defined(ENABLE_PLUGINS) 653 #if defined(ENABLE_PLUGINS)
654 render_frame->Send(new ChromeViewHostMsg_GetPluginInfo( 654 render_frame->Send(new ChromeViewHostMsg_GetPluginInfo(
655 render_frame->GetRoutingID(), GURL(params.url), 655 render_frame->GetRoutingID(), GURL(params.url),
656 frame->top()->document().url(), orig_mime_type, &output)); 656 frame->top()->document().url(), orig_mime_type, &output));
657 657
658 #else 658 #else
659 output.status.value = ChromeViewHostMsg_GetPluginInfo_Status::kNotFound; 659 output.status = ChromeViewHostMsg_GetPluginInfo_Status::kNotFound;
660 #endif 660 #endif
661 *plugin = CreatePlugin(render_frame, frame, params, output); 661 *plugin = CreatePlugin(render_frame, frame, params, output);
662 return true; 662 return true;
663 } 663 }
664 664
665 WebPlugin* ChromeContentRendererClient::CreatePluginReplacement( 665 WebPlugin* ChromeContentRendererClient::CreatePluginReplacement(
666 content::RenderFrame* render_frame, 666 content::RenderFrame* render_frame,
667 const base::FilePath& plugin_path) { 667 const base::FilePath& plugin_path) {
668 ChromePluginPlaceholder* placeholder = 668 ChromePluginPlaceholder* placeholder =
669 ChromePluginPlaceholder::CreateErrorPlugin(render_frame, plugin_path); 669 ChromePluginPlaceholder::CreateErrorPlugin(render_frame, plugin_path);
(...skipping 16 matching lines...) Expand all
686 // Lifetime is tied to |render_frame| via content::RenderFrameObserver. 686 // Lifetime is tied to |render_frame| via content::RenderFrameObserver.
687 new prerender::PrerenderMediaLoadDeferrer(render_frame, closure); 687 new prerender::PrerenderMediaLoadDeferrer(render_frame, closure);
688 #endif 688 #endif
689 } 689 }
690 690
691 WebPlugin* ChromeContentRendererClient::CreatePlugin( 691 WebPlugin* ChromeContentRendererClient::CreatePlugin(
692 content::RenderFrame* render_frame, 692 content::RenderFrame* render_frame,
693 blink::WebLocalFrame* frame, 693 blink::WebLocalFrame* frame,
694 const WebPluginParams& original_params, 694 const WebPluginParams& original_params,
695 const ChromeViewHostMsg_GetPluginInfo_Output& output) { 695 const ChromeViewHostMsg_GetPluginInfo_Output& output) {
696 const ChromeViewHostMsg_GetPluginInfo_Status& status = output.status;
697 const WebPluginInfo& info = output.plugin; 696 const WebPluginInfo& info = output.plugin;
698 const std::string& actual_mime_type = output.actual_mime_type; 697 const std::string& actual_mime_type = output.actual_mime_type;
699 const base::string16& group_name = output.group_name; 698 const base::string16& group_name = output.group_name;
700 const std::string& identifier = output.group_identifier; 699 const std::string& identifier = output.group_identifier;
701 ChromeViewHostMsg_GetPluginInfo_Status::Value status_value = status.value; 700 ChromeViewHostMsg_GetPluginInfo_Status status = output.status;
702 GURL url(original_params.url); 701 GURL url(original_params.url);
703 std::string orig_mime_type = original_params.mimeType.utf8(); 702 std::string orig_mime_type = original_params.mimeType.utf8();
704 ChromePluginPlaceholder* placeholder = NULL; 703 ChromePluginPlaceholder* placeholder = NULL;
705 704
706 // If the browser plugin is to be enabled, this should be handled by the 705 // 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 706 // renderer, so the code won't reach here due to the early exit in
708 // OverrideCreatePlugin. 707 // OverrideCreatePlugin.
709 if (status_value == ChromeViewHostMsg_GetPluginInfo_Status::kNotFound || 708 if (status == ChromeViewHostMsg_GetPluginInfo_Status::kNotFound ||
710 orig_mime_type == content::kBrowserPluginMimeType) { 709 orig_mime_type == content::kBrowserPluginMimeType) {
711 #if defined(OS_ANDROID) 710 #if defined(OS_ANDROID)
712 if (plugins::MobileYouTubePlugin::IsYouTubeURL(url, orig_mime_type)) { 711 if (plugins::MobileYouTubePlugin::IsYouTubeURL(url, orig_mime_type)) {
713 base::StringPiece template_html( 712 base::StringPiece template_html(
714 ResourceBundle::GetSharedInstance().GetRawDataResource( 713 ResourceBundle::GetSharedInstance().GetRawDataResource(
715 IDR_MOBILE_YOUTUBE_PLUGIN_HTML)); 714 IDR_MOBILE_YOUTUBE_PLUGIN_HTML));
716 return (new plugins::MobileYouTubePlugin( 715 return (new plugins::MobileYouTubePlugin(
717 render_frame, 716 render_frame,
718 frame, 717 frame,
719 original_params, 718 original_params,
(...skipping 25 matching lines...) Expand all
745 } 744 }
746 745
747 ContentSettingsObserver* observer = 746 ContentSettingsObserver* observer =
748 ContentSettingsObserver::Get(render_frame); 747 ContentSettingsObserver::Get(render_frame);
749 748
750 const ContentSettingsType content_type = 749 const ContentSettingsType content_type =
751 ShouldUseJavaScriptSettingForPlugin(info) 750 ShouldUseJavaScriptSettingForPlugin(info)
752 ? CONTENT_SETTINGS_TYPE_JAVASCRIPT 751 ? CONTENT_SETTINGS_TYPE_JAVASCRIPT
753 : CONTENT_SETTINGS_TYPE_PLUGINS; 752 : CONTENT_SETTINGS_TYPE_PLUGINS;
754 753
755 if ((status_value == 754 if ((status == ChromeViewHostMsg_GetPluginInfo_Status::kUnauthorized ||
756 ChromeViewHostMsg_GetPluginInfo_Status::kUnauthorized || 755 status == ChromeViewHostMsg_GetPluginInfo_Status::kBlocked) &&
757 status_value == ChromeViewHostMsg_GetPluginInfo_Status::kBlocked) &&
758 observer->IsPluginTemporarilyAllowed(identifier)) { 756 observer->IsPluginTemporarilyAllowed(identifier)) {
759 status_value = ChromeViewHostMsg_GetPluginInfo_Status::kAllowed; 757 status = ChromeViewHostMsg_GetPluginInfo_Status::kAllowed;
760 } 758 }
761 759
762 #if defined(OS_WIN) 760 #if defined(OS_WIN)
763 // In Windows we need to check if we can load NPAPI plugins. 761 // In Windows we need to check if we can load NPAPI plugins.
764 // For example, if the render view is in the Ash desktop, we should not. 762 // For example, if the render view is in the Ash desktop, we should not.
765 // If user is on ALLOW or DETECT setting, loading needs to be blocked here. 763 // If user is on ALLOW or DETECT setting, loading needs to be blocked here.
766 if ((status_value == ChromeViewHostMsg_GetPluginInfo_Status::kAllowed || 764 if ((status == ChromeViewHostMsg_GetPluginInfo_Status::kAllowed ||
767 status_value == 765 status ==
768 ChromeViewHostMsg_GetPluginInfo_Status::kPlayImportantContent) && 766 ChromeViewHostMsg_GetPluginInfo_Status::kPlayImportantContent) &&
769 info.type == content::WebPluginInfo::PLUGIN_TYPE_NPAPI) { 767 info.type == content::WebPluginInfo::PLUGIN_TYPE_NPAPI) {
770 if (observer->AreNPAPIPluginsBlocked()) 768 if (observer->AreNPAPIPluginsBlocked())
771 status_value = 769 status = ChromeViewHostMsg_GetPluginInfo_Status::kNPAPINotSupported;
772 ChromeViewHostMsg_GetPluginInfo_Status::kNPAPINotSupported;
773 } 770 }
774 #endif 771 #endif
775 772
776 auto create_blocked_plugin = 773 auto create_blocked_plugin =
777 [&render_frame, &frame, &params, &info, &identifier, &group_name]( 774 [&render_frame, &frame, &params, &info, &identifier, &group_name](
778 int template_id, const base::string16& message) { 775 int template_id, const base::string16& message) {
779 return ChromePluginPlaceholder::CreateBlockedPlugin( 776 return ChromePluginPlaceholder::CreateBlockedPlugin(
780 render_frame, frame, params, info, identifier, group_name, 777 render_frame, frame, params, info, identifier, group_name,
781 template_id, message, PlaceholderPosterInfo()); 778 template_id, message, PlaceholderPosterInfo());
782 }; 779 };
783 switch (status_value) { 780 switch (status) {
784 case ChromeViewHostMsg_GetPluginInfo_Status::kNotFound: { 781 case ChromeViewHostMsg_GetPluginInfo_Status::kNotFound: {
785 NOTREACHED(); 782 NOTREACHED();
786 break; 783 break;
787 } 784 }
788 case ChromeViewHostMsg_GetPluginInfo_Status::kAllowed: 785 case ChromeViewHostMsg_GetPluginInfo_Status::kAllowed:
789 case ChromeViewHostMsg_GetPluginInfo_Status::kPlayImportantContent: { 786 case ChromeViewHostMsg_GetPluginInfo_Status::kPlayImportantContent: {
790 #if !defined(DISABLE_NACL) && defined(ENABLE_EXTENSIONS) 787 #if !defined(DISABLE_NACL) && defined(ENABLE_EXTENSIONS)
791 const bool is_nacl_plugin = 788 const bool is_nacl_plugin =
792 info.name == ASCIIToUTF16(nacl::kNaClPluginName); 789 info.name == ASCIIToUTF16(nacl::kNaClPluginName);
793 const bool is_nacl_mime_type = 790 const bool is_nacl_mime_type =
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
831 "Client in about:flags."; 828 "Client in about:flags.";
832 } else if (is_pnacl_mime_type) { 829 } else if (is_pnacl_mime_type) {
833 error_message = 830 error_message =
834 "Portable Native Client must not be disabled in about:flags."; 831 "Portable Native Client must not be disabled in about:flags.";
835 } 832 }
836 frame->addMessageToConsole( 833 frame->addMessageToConsole(
837 WebConsoleMessage(WebConsoleMessage::LevelError, 834 WebConsoleMessage(WebConsoleMessage::LevelError,
838 error_message)); 835 error_message));
839 placeholder = create_blocked_plugin( 836 placeholder = create_blocked_plugin(
840 IDR_BLOCKED_PLUGIN_HTML, 837 IDR_BLOCKED_PLUGIN_HTML,
841 #if defined(OS_CHROMEOS) 838 #if defined(OS_CHROMEOS)
842 l10n_util::GetStringUTF16(IDS_NACL_PLUGIN_BLOCKED)); 839 l10n_util::GetStringUTF16(IDS_NACL_PLUGIN_BLOCKED));
843 #else 840 #else
844 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name)); 841 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name));
845 #endif 842 #endif
846 break; 843 break;
847 } 844 }
848 } 845 }
849 #endif // !defined(DISABLE_NACL) && defined(ENABLE_EXTENSIONS) 846 #endif // !defined(DISABLE_NACL) && defined(ENABLE_EXTENSIONS)
850 847
851 #if defined(ENABLE_PLUGINS) 848 #if defined(ENABLE_PLUGINS)
852 // Delay loading plugins if prerendering. 849 // Delay loading plugins if prerendering.
853 // TODO(mmenke): In the case of prerendering, feed into 850 // TODO(mmenke): In the case of prerendering, feed into
854 // ChromeContentRendererClient::CreatePlugin instead, to 851 // ChromeContentRendererClient::CreatePlugin instead, to
855 // reduce the chance of future regressions. 852 // reduce the chance of future regressions.
856 bool is_prerendering = 853 bool is_prerendering =
857 prerender::PrerenderHelper::IsPrerendering(render_frame); 854 prerender::PrerenderHelper::IsPrerendering(render_frame);
858 855
859 // TODO(tommycli): Plugin Power Saver is disabled on prerendered pages. 856 // TODO(tommycli): Plugin Power Saver is disabled on prerendered pages.
860 // This is because the placeholder does not feed back into 857 // This is because the placeholder does not feed back into
861 // ChromeContentRendererClient::CreatePlugin. Because of this, it does 858 // ChromeContentRendererClient::CreatePlugin. Because of this, it does
862 // not handle the preroll to UI overlay placeholder flow correctly. 859 // not handle the preroll to UI overlay placeholder flow correctly.
863 // 860 //
864 // Background tab plugin deferral is disabled for the same reason. 861 // Background tab plugin deferral is disabled for the same reason.
865 // 862 //
866 // https://crbug.com/471427 863 // https://crbug.com/471427
867 bool power_saver_enabled = 864 bool power_saver_enabled =
868 !is_prerendering && 865 !is_prerendering &&
869 status_value == 866 status ==
870 ChromeViewHostMsg_GetPluginInfo_Status::kPlayImportantContent; 867 ChromeViewHostMsg_GetPluginInfo_Status::kPlayImportantContent;
871 868
872 if (info.name == ASCIIToUTF16(content::kFlashPluginName)) 869 if (info.name == ASCIIToUTF16(content::kFlashPluginName))
873 TrackPosterParamPresence(params, power_saver_enabled); 870 TrackPosterParamPresence(params, power_saver_enabled);
874 871
875 PlaceholderPosterInfo poster_info; 872 PlaceholderPosterInfo poster_info;
876 if (power_saver_enabled) { 873 if (power_saver_enabled) {
877 poster_info.poster_attribute = 874 poster_info.poster_attribute =
878 GetPluginInstancePosterAttribute(params); 875 GetPluginInstancePosterAttribute(params);
879 poster_info.base_url = frame->document().url(); 876 poster_info.base_url = frame->document().url();
(...skipping 752 matching lines...) Expand 10 before | Expand all | Expand 10 after
1632 if (mime_type == content::kBrowserPluginMimeType) { 1629 if (mime_type == content::kBrowserPluginMimeType) {
1633 return new extensions::ExtensionsGuestViewContainer(render_frame); 1630 return new extensions::ExtensionsGuestViewContainer(render_frame);
1634 } else { 1631 } else {
1635 return new extensions::MimeHandlerViewContainer( 1632 return new extensions::MimeHandlerViewContainer(
1636 render_frame, mime_type, original_url); 1633 render_frame, mime_type, original_url);
1637 } 1634 }
1638 #else 1635 #else
1639 return NULL; 1636 return NULL;
1640 #endif 1637 #endif
1641 } 1638 }
OLDNEW
« no previous file with comments | « chrome/common/render_messages.h ('k') | chrome/renderer/chrome_content_renderer_client_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698