| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/render_view.h" | 5 #include "chrome/renderer/render_view.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 #include "webkit/glue/dom_operations.h" | 167 #include "webkit/glue/dom_operations.h" |
| 168 #include "webkit/glue/form_data.h" | 168 #include "webkit/glue/form_data.h" |
| 169 #include "webkit/glue/form_field.h" | 169 #include "webkit/glue/form_field.h" |
| 170 #include "webkit/glue/glue_serialize.h" | 170 #include "webkit/glue/glue_serialize.h" |
| 171 #include "webkit/glue/image_decoder.h" | 171 #include "webkit/glue/image_decoder.h" |
| 172 #include "webkit/glue/image_resource_fetcher.h" | 172 #include "webkit/glue/image_resource_fetcher.h" |
| 173 #include "webkit/glue/media/buffered_data_source.h" | 173 #include "webkit/glue/media/buffered_data_source.h" |
| 174 #include "webkit/glue/media/simple_data_source.h" | 174 #include "webkit/glue/media/simple_data_source.h" |
| 175 #include "webkit/glue/media/video_renderer_impl.h" | 175 #include "webkit/glue/media/video_renderer_impl.h" |
| 176 #include "webkit/glue/password_form_dom_manager.h" | 176 #include "webkit/glue/password_form_dom_manager.h" |
| 177 #include "webkit/glue/plugins/default_plugin_shared.h" | |
| 178 #include "webkit/glue/plugins/plugin_list.h" | |
| 179 #include "webkit/glue/plugins/webplugin_delegate.h" | |
| 180 #include "webkit/glue/plugins/webplugin_delegate_impl.h" | |
| 181 #include "webkit/glue/plugins/webplugin_impl.h" | |
| 182 #include "webkit/glue/plugins/webview_plugin.h" | |
| 183 #include "webkit/glue/resource_fetcher.h" | 177 #include "webkit/glue/resource_fetcher.h" |
| 184 #include "webkit/glue/site_isolation_metrics.h" | 178 #include "webkit/glue/site_isolation_metrics.h" |
| 185 #include "webkit/glue/webaccessibility.h" | 179 #include "webkit/glue/webaccessibility.h" |
| 186 #include "webkit/glue/webdropdata.h" | 180 #include "webkit/glue/webdropdata.h" |
| 187 #include "webkit/glue/webkit_glue.h" | 181 #include "webkit/glue/webkit_glue.h" |
| 188 #include "webkit/glue/webmediaplayer_impl.h" | 182 #include "webkit/glue/webmediaplayer_impl.h" |
| 183 #include "webkit/plugins/npapi/default_plugin_shared.h" |
| 184 #include "webkit/plugins/npapi/plugin_list.h" |
| 185 #include "webkit/plugins/npapi/webplugin_delegate.h" |
| 186 #include "webkit/plugins/npapi/webplugin_delegate_impl.h" |
| 187 #include "webkit/plugins/npapi/webplugin_impl.h" |
| 188 #include "webkit/plugins/npapi/webview_plugin.h" |
| 189 #include "webkit/plugins/ppapi/ppapi_webplugin_impl.h" | 189 #include "webkit/plugins/ppapi/ppapi_webplugin_impl.h" |
| 190 | 190 |
| 191 #if defined(OS_WIN) | 191 #if defined(OS_WIN) |
| 192 // TODO(port): these files are currently Windows only because they concern: | 192 // TODO(port): these files are currently Windows only because they concern: |
| 193 // * theming | 193 // * theming |
| 194 #include "gfx/native_theme_win.h" | 194 #include "gfx/native_theme_win.h" |
| 195 #elif defined(USE_X11) | 195 #elif defined(USE_X11) |
| 196 #include "gfx/native_theme_linux.h" | 196 #include "gfx/native_theme_linux.h" |
| 197 #include "third_party/WebKit/WebKit/chromium/public/linux/WebRenderTheme.h" | 197 #include "third_party/WebKit/WebKit/chromium/public/linux/WebRenderTheme.h" |
| 198 #elif defined(OS_MACOSX) | 198 #elif defined(OS_MACOSX) |
| (...skipping 629 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 828 Send(new ViewHostMsg_InstallApplication(routing_id_, *pending_app_info_)); | 828 Send(new ViewHostMsg_InstallApplication(routing_id_, *pending_app_info_)); |
| 829 pending_app_info_.reset(NULL); | 829 pending_app_info_.reset(NULL); |
| 830 } | 830 } |
| 831 | 831 |
| 832 void RenderView::PluginCrashed(const FilePath& plugin_path) { | 832 void RenderView::PluginCrashed(const FilePath& plugin_path) { |
| 833 Send(new ViewHostMsg_CrashedPlugin(routing_id_, plugin_path)); | 833 Send(new ViewHostMsg_CrashedPlugin(routing_id_, plugin_path)); |
| 834 } | 834 } |
| 835 | 835 |
| 836 WebPlugin* RenderView::CreatePluginNoCheck(WebFrame* frame, | 836 WebPlugin* RenderView::CreatePluginNoCheck(WebFrame* frame, |
| 837 const WebPluginParams& params) { | 837 const WebPluginParams& params) { |
| 838 WebPluginInfo info; | 838 webkit::npapi::WebPluginInfo info; |
| 839 bool found; | 839 bool found; |
| 840 ContentSetting setting; | 840 ContentSetting setting; |
| 841 std::string mime_type; | 841 std::string mime_type; |
| 842 Send(new ViewHostMsg_GetPluginInfo( | 842 Send(new ViewHostMsg_GetPluginInfo( |
| 843 params.url, frame->top()->url(), params.mimeType.utf8(), &found, | 843 params.url, frame->top()->url(), params.mimeType.utf8(), &found, |
| 844 &info, &setting, &mime_type)); | 844 &info, &setting, &mime_type)); |
| 845 if (!found || !info.enabled) | 845 if (!found || !info.enabled) |
| 846 return NULL; | 846 return NULL; |
| 847 | 847 |
| 848 scoped_refptr<webkit::ppapi::PluginModule> pepper_module( | 848 scoped_refptr<webkit::ppapi::PluginModule> pepper_module( |
| (...skipping 1891 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2740 SendAndRunNestedMessageLoop(new ViewHostMsg_RunModal(routing_id_)); | 2740 SendAndRunNestedMessageLoop(new ViewHostMsg_RunModal(routing_id_)); |
| 2741 } | 2741 } |
| 2742 | 2742 |
| 2743 // WebKit::WebFrameClient ----------------------------------------------------- | 2743 // WebKit::WebFrameClient ----------------------------------------------------- |
| 2744 | 2744 |
| 2745 WebPlugin* RenderView::createPlugin(WebFrame* frame, | 2745 WebPlugin* RenderView::createPlugin(WebFrame* frame, |
| 2746 const WebPluginParams& params) { | 2746 const WebPluginParams& params) { |
| 2747 bool found = false; | 2747 bool found = false; |
| 2748 ContentSetting plugin_setting = CONTENT_SETTING_DEFAULT; | 2748 ContentSetting plugin_setting = CONTENT_SETTING_DEFAULT; |
| 2749 CommandLine* cmd = CommandLine::ForCurrentProcess(); | 2749 CommandLine* cmd = CommandLine::ForCurrentProcess(); |
| 2750 WebPluginInfo info; | 2750 webkit::npapi::WebPluginInfo info; |
| 2751 GURL url(params.url); | 2751 GURL url(params.url); |
| 2752 std::string actual_mime_type; | 2752 std::string actual_mime_type; |
| 2753 Send(new ViewHostMsg_GetPluginInfo(url, | 2753 Send(new ViewHostMsg_GetPluginInfo(url, |
| 2754 frame->top()->url(), | 2754 frame->top()->url(), |
| 2755 params.mimeType.utf8(), | 2755 params.mimeType.utf8(), |
| 2756 &found, | 2756 &found, |
| 2757 &info, | 2757 &info, |
| 2758 &plugin_setting, | 2758 &plugin_setting, |
| 2759 &actual_mime_type)); | 2759 &actual_mime_type)); |
| 2760 | 2760 |
| 2761 if (!found) | 2761 if (!found) |
| 2762 return NULL; | 2762 return NULL; |
| 2763 DCHECK(plugin_setting != CONTENT_SETTING_DEFAULT); | 2763 DCHECK(plugin_setting != CONTENT_SETTING_DEFAULT); |
| 2764 | 2764 |
| 2765 const PluginGroup* group = | 2765 const webkit::npapi::PluginGroup* group = |
| 2766 NPAPI::PluginList::Singleton()->GetPluginGroup(info); | 2766 webkit::npapi::PluginList::Singleton()->GetPluginGroup(info); |
| 2767 DCHECK(group != NULL); | 2767 DCHECK(group != NULL); |
| 2768 | 2768 |
| 2769 if (!info.enabled) { | 2769 if (!info.enabled) { |
| 2770 if (cmd->HasSwitch(switches::kDisableOutdatedPlugins) && | 2770 if (cmd->HasSwitch(switches::kDisableOutdatedPlugins) && |
| 2771 group->IsVulnerable()) { | 2771 group->IsVulnerable()) { |
| 2772 Send(new ViewHostMsg_DisabledOutdatedPlugin(routing_id_, | 2772 Send(new ViewHostMsg_DisabledOutdatedPlugin(routing_id_, |
| 2773 group->GetGroupName(), | 2773 group->GetGroupName(), |
| 2774 GURL(group->GetUpdateURL()))); | 2774 GURL(group->GetUpdateURL()))); |
| 2775 return CreateOutdatedPluginPlaceholder(frame, params, *group); | 2775 return CreateOutdatedPluginPlaceholder(frame, params, *group); |
| 2776 } | 2776 } |
| 2777 return NULL; | 2777 return NULL; |
| 2778 } | 2778 } |
| 2779 | 2779 |
| 2780 ContentSetting host_setting = | 2780 ContentSetting host_setting = |
| 2781 current_content_settings_.settings[CONTENT_SETTINGS_TYPE_PLUGINS]; | 2781 current_content_settings_.settings[CONTENT_SETTINGS_TYPE_PLUGINS]; |
| 2782 if (info.path.value() == kDefaultPluginLibraryName || | 2782 if (info.path.value() == webkit::npapi::kDefaultPluginLibraryName || |
| 2783 plugin_setting == CONTENT_SETTING_ALLOW || | 2783 plugin_setting == CONTENT_SETTING_ALLOW || |
| 2784 host_setting == CONTENT_SETTING_ALLOW) { | 2784 host_setting == CONTENT_SETTING_ALLOW) { |
| 2785 scoped_refptr<webkit::ppapi::PluginModule> pepper_module( | 2785 scoped_refptr<webkit::ppapi::PluginModule> pepper_module( |
| 2786 pepper_delegate_.CreatePepperPlugin(info.path)); | 2786 pepper_delegate_.CreatePepperPlugin(info.path)); |
| 2787 if (pepper_module) | 2787 if (pepper_module) |
| 2788 return CreatePepperPlugin(frame, params, info.path, pepper_module.get()); | 2788 return CreatePepperPlugin(frame, params, info.path, pepper_module.get()); |
| 2789 return CreateNPAPIPlugin(frame, params, info.path, actual_mime_type); | 2789 return CreateNPAPIPlugin(frame, params, info.path, actual_mime_type); |
| 2790 } | 2790 } |
| 2791 std::string resource; | 2791 std::string resource; |
| 2792 if (cmd->HasSwitch(switches::kEnableResourceContentSettings)) | 2792 if (cmd->HasSwitch(switches::kEnableResourceContentSettings)) |
| (...skipping 1142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3935 return; | 3935 return; |
| 3936 } | 3936 } |
| 3937 | 3937 |
| 3938 ChildThread::current()->file_system_dispatcher()->OpenFileSystem( | 3938 ChildThread::current()->file_system_dispatcher()->OpenFileSystem( |
| 3939 GURL(origin.toString()), static_cast<fileapi::FileSystemType>(type), | 3939 GURL(origin.toString()), static_cast<fileapi::FileSystemType>(type), |
| 3940 size, create, new WebFileSystemCallbackDispatcher(callbacks)); | 3940 size, create, new WebFileSystemCallbackDispatcher(callbacks)); |
| 3941 } | 3941 } |
| 3942 | 3942 |
| 3943 // webkit_glue::WebPluginPageDelegate ----------------------------------------- | 3943 // webkit_glue::WebPluginPageDelegate ----------------------------------------- |
| 3944 | 3944 |
| 3945 webkit_glue::WebPluginDelegate* RenderView::CreatePluginDelegate( | 3945 webkit::npapi::WebPluginDelegate* RenderView::CreatePluginDelegate( |
| 3946 const FilePath& file_path, | 3946 const FilePath& file_path, |
| 3947 const std::string& mime_type) { | 3947 const std::string& mime_type) { |
| 3948 if (!PluginChannelHost::IsListening()) | 3948 if (!PluginChannelHost::IsListening()) |
| 3949 return NULL; | 3949 return NULL; |
| 3950 | 3950 |
| 3951 bool use_pepper_host = false; | 3951 bool use_pepper_host = false; |
| 3952 bool in_process_plugin = RenderProcess::current()->UseInProcessPlugins(); | 3952 bool in_process_plugin = RenderProcess::current()->UseInProcessPlugins(); |
| 3953 // Check for trusted Pepper plugins. | 3953 // Check for trusted Pepper plugins. |
| 3954 const char kPepperPrefix[] = "pepper-"; | 3954 const char kPepperPrefix[] = "pepper-"; |
| 3955 if (StartsWithASCII(mime_type, kPepperPrefix, true)) { | 3955 if (StartsWithASCII(mime_type, kPepperPrefix, true)) { |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4030 } | 4030 } |
| 4031 | 4031 |
| 4032 void RenderView::WillDestroyPluginWindow(gfx::PluginWindowHandle window) { | 4032 void RenderView::WillDestroyPluginWindow(gfx::PluginWindowHandle window) { |
| 4033 #if defined(USE_X11) | 4033 #if defined(USE_X11) |
| 4034 RenderThread::current()->Send(new ViewHostMsg_DestroyPluginContainer( | 4034 RenderThread::current()->Send(new ViewHostMsg_DestroyPluginContainer( |
| 4035 routing_id(), window)); | 4035 routing_id(), window)); |
| 4036 #endif | 4036 #endif |
| 4037 CleanupWindowInPluginMoves(window); | 4037 CleanupWindowInPluginMoves(window); |
| 4038 } | 4038 } |
| 4039 | 4039 |
| 4040 void RenderView::DidMovePlugin(const webkit_glue::WebPluginGeometry& move) { | 4040 void RenderView::DidMovePlugin(const webkit::npapi::WebPluginGeometry& move) { |
| 4041 SchedulePluginMove(move); | 4041 SchedulePluginMove(move); |
| 4042 } | 4042 } |
| 4043 | 4043 |
| 4044 void RenderView::DidStartLoadingForPlugin() { | 4044 void RenderView::DidStartLoadingForPlugin() { |
| 4045 // TODO(darin): Make is_loading_ be a counter! | 4045 // TODO(darin): Make is_loading_ be a counter! |
| 4046 didStartLoading(); | 4046 didStartLoading(); |
| 4047 } | 4047 } |
| 4048 | 4048 |
| 4049 void RenderView::DidStopLoadingForPlugin() { | 4049 void RenderView::DidStopLoadingForPlugin() { |
| 4050 // TODO(darin): Make is_loading_ be a counter! | 4050 // TODO(darin): Make is_loading_ be a counter! |
| (...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4432 | 4432 |
| 4433 WebPlugin* RenderView::CreatePepperPlugin( | 4433 WebPlugin* RenderView::CreatePepperPlugin( |
| 4434 WebFrame* frame, | 4434 WebFrame* frame, |
| 4435 const WebPluginParams& params, | 4435 const WebPluginParams& params, |
| 4436 const FilePath& path, | 4436 const FilePath& path, |
| 4437 webkit::ppapi::PluginModule* pepper_module) { | 4437 webkit::ppapi::PluginModule* pepper_module) { |
| 4438 return new webkit::ppapi::WebPluginImpl( | 4438 return new webkit::ppapi::WebPluginImpl( |
| 4439 pepper_module, params, pepper_delegate_.AsWeakPtr()); | 4439 pepper_module, params, pepper_delegate_.AsWeakPtr()); |
| 4440 } | 4440 } |
| 4441 | 4441 |
| 4442 WebPlugin* RenderView::CreateNPAPIPlugin(WebFrame* frame, | 4442 WebPlugin* RenderView::CreateNPAPIPlugin( |
| 4443 const WebPluginParams& params, | 4443 WebFrame* frame, |
| 4444 const FilePath& path, | 4444 const WebPluginParams& params, |
| 4445 const std::string& mime_type) { | 4445 const FilePath& path, |
| 4446 return new webkit_glue::WebPluginImpl( | 4446 const std::string& mime_type) { |
| 4447 return new webkit::npapi::WebPluginImpl( |
| 4447 frame, params, path, mime_type, AsWeakPtr()); | 4448 frame, params, path, mime_type, AsWeakPtr()); |
| 4448 } | 4449 } |
| 4449 | 4450 |
| 4450 WebPlugin* RenderView::CreateOutdatedPluginPlaceholder( | 4451 WebPlugin* RenderView::CreateOutdatedPluginPlaceholder( |
| 4451 WebFrame* frame, | 4452 WebFrame* frame, |
| 4452 const WebPluginParams& params, | 4453 const WebPluginParams& params, |
| 4453 const PluginGroup& group) { | 4454 const webkit::npapi::PluginGroup& group) { |
| 4454 int resource_id = IDR_OUTDATED_PLUGIN_HTML; | 4455 int resource_id = IDR_OUTDATED_PLUGIN_HTML; |
| 4455 const base::StringPiece template_html( | 4456 const base::StringPiece template_html( |
| 4456 ResourceBundle::GetSharedInstance().GetRawDataResource(resource_id)); | 4457 ResourceBundle::GetSharedInstance().GetRawDataResource(resource_id)); |
| 4457 | 4458 |
| 4458 DCHECK(!template_html.empty()) << "unable to load template. ID: " | 4459 DCHECK(!template_html.empty()) << "unable to load template. ID: " |
| 4459 << resource_id; | 4460 << resource_id; |
| 4460 | 4461 |
| 4461 DictionaryValue values; | 4462 DictionaryValue values; |
| 4462 values.SetString("message", | 4463 values.SetString("message", |
| 4463 l10n_util::GetStringFUTF8(IDS_PLUGIN_OUTDATED, group.GetGroupName())); | 4464 l10n_util::GetStringFUTF8(IDS_PLUGIN_OUTDATED, group.GetGroupName())); |
| 4464 values.Set("pluginGroup", group.GetDataForUI()); | 4465 values.Set("pluginGroup", group.GetDataForUI()); |
| 4465 | 4466 |
| 4466 // "t" is the id of the templates root node. | 4467 // "t" is the id of the templates root node. |
| 4467 std::string htmlData = jstemplate_builder::GetTemplatesHtml( | 4468 std::string htmlData = jstemplate_builder::GetTemplatesHtml( |
| 4468 template_html, &values, "t"); | 4469 template_html, &values, "t"); |
| 4469 | 4470 |
| 4470 return WebViewPlugin::Create(NULL, | 4471 return webkit::npapi::WebViewPlugin::Create(NULL, |
| 4471 webkit_preferences_, | 4472 webkit_preferences_, |
| 4472 htmlData, | 4473 htmlData, |
| 4473 GURL("chrome://outdatedplugin/")); | 4474 GURL("chrome://outdatedplugin/")); |
| 4474 } | 4475 } |
| 4475 | 4476 |
| 4476 void RenderView::OnZoom(PageZoom::Function function) { | 4477 void RenderView::OnZoom(PageZoom::Function function) { |
| 4477 if (!webview()) // Not sure if this can happen, but no harm in being safe. | 4478 if (!webview()) // Not sure if this can happen, but no harm in being safe. |
| 4478 return; | 4479 return; |
| 4479 | 4480 |
| 4480 webview()->hidePopups(); | 4481 webview()->hidePopups(); |
| (...skipping 1281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5762 external_popup_menu_.reset(); | 5763 external_popup_menu_.reset(); |
| 5763 } | 5764 } |
| 5764 #endif | 5765 #endif |
| 5765 | 5766 |
| 5766 void RenderView::AddErrorToRootConsole(const string16& message) { | 5767 void RenderView::AddErrorToRootConsole(const string16& message) { |
| 5767 if (webview() && webview()->mainFrame()) { | 5768 if (webview() && webview()->mainFrame()) { |
| 5768 webview()->mainFrame()->addMessageToConsole( | 5769 webview()->mainFrame()->addMessageToConsole( |
| 5769 WebConsoleMessage(WebConsoleMessage::LevelError, message)); | 5770 WebConsoleMessage(WebConsoleMessage::LevelError, message)); |
| 5770 } | 5771 } |
| 5771 } | 5772 } |
| OLD | NEW |