| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 1007 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1018 OnDragSourceEndedOrMoved) | 1018 OnDragSourceEndedOrMoved) |
| 1019 IPC_MESSAGE_HANDLER(ViewMsg_DragSourceSystemDragEnded, | 1019 IPC_MESSAGE_HANDLER(ViewMsg_DragSourceSystemDragEnded, |
| 1020 OnDragSourceSystemDragEnded) | 1020 OnDragSourceSystemDragEnded) |
| 1021 IPC_MESSAGE_HANDLER(ViewMsg_SetInitialFocus, OnSetInitialFocus) | 1021 IPC_MESSAGE_HANDLER(ViewMsg_SetInitialFocus, OnSetInitialFocus) |
| 1022 IPC_MESSAGE_HANDLER(ViewMsg_ScrollFocusedEditableNodeIntoView, | 1022 IPC_MESSAGE_HANDLER(ViewMsg_ScrollFocusedEditableNodeIntoView, |
| 1023 OnScrollFocusedEditableNodeIntoView) | 1023 OnScrollFocusedEditableNodeIntoView) |
| 1024 IPC_MESSAGE_HANDLER(ViewMsg_UpdateTargetURL_ACK, OnUpdateTargetURLAck) | 1024 IPC_MESSAGE_HANDLER(ViewMsg_UpdateTargetURL_ACK, OnUpdateTargetURLAck) |
| 1025 IPC_MESSAGE_HANDLER(ViewMsg_UpdateWebPreferences, OnUpdateWebPreferences) | 1025 IPC_MESSAGE_HANDLER(ViewMsg_UpdateWebPreferences, OnUpdateWebPreferences) |
| 1026 IPC_MESSAGE_HANDLER(ViewMsg_SetAltErrorPageURL, OnSetAltErrorPageURL) | 1026 IPC_MESSAGE_HANDLER(ViewMsg_SetAltErrorPageURL, OnSetAltErrorPageURL) |
| 1027 IPC_MESSAGE_HANDLER(ViewMsg_InstallMissingPlugin, OnInstallMissingPlugin) | 1027 IPC_MESSAGE_HANDLER(ViewMsg_InstallMissingPlugin, OnInstallMissingPlugin) |
| 1028 IPC_MESSAGE_HANDLER(ViewMsg_DisplayPrerenderedPage, |
| 1029 OnDisplayPrerenderedPage) |
| 1028 IPC_MESSAGE_HANDLER(ViewMsg_RunFileChooserResponse, OnFileChooserResponse) | 1030 IPC_MESSAGE_HANDLER(ViewMsg_RunFileChooserResponse, OnFileChooserResponse) |
| 1029 IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode) | 1031 IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode) |
| 1030 IPC_MESSAGE_HANDLER(ViewMsg_GetAllSavableResourceLinksForCurrentPage, | 1032 IPC_MESSAGE_HANDLER(ViewMsg_GetAllSavableResourceLinksForCurrentPage, |
| 1031 OnGetAllSavableResourceLinksForCurrentPage) | 1033 OnGetAllSavableResourceLinksForCurrentPage) |
| 1032 IPC_MESSAGE_HANDLER( | 1034 IPC_MESSAGE_HANDLER( |
| 1033 ViewMsg_GetSerializedHtmlDataForCurrentPageWithLocalLinks, | 1035 ViewMsg_GetSerializedHtmlDataForCurrentPageWithLocalLinks, |
| 1034 OnGetSerializedHtmlDataForCurrentPageWithLocalLinks) | 1036 OnGetSerializedHtmlDataForCurrentPageWithLocalLinks) |
| 1035 IPC_MESSAGE_HANDLER(ViewMsg_GetApplicationInfo, OnGetApplicationInfo) | 1037 IPC_MESSAGE_HANDLER(ViewMsg_GetApplicationInfo, OnGetApplicationInfo) |
| 1036 IPC_MESSAGE_HANDLER(ViewMsg_ShouldClose, OnShouldClose) | 1038 IPC_MESSAGE_HANDLER(ViewMsg_ShouldClose, OnShouldClose) |
| 1037 IPC_MESSAGE_HANDLER(ViewMsg_ClosePage, OnClosePage) | 1039 IPC_MESSAGE_HANDLER(ViewMsg_ClosePage, OnClosePage) |
| (...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1446 | 1448 |
| 1447 if (!params.extra_headers.empty()) { | 1449 if (!params.extra_headers.empty()) { |
| 1448 for (net::HttpUtil::HeadersIterator i(params.extra_headers.begin(), | 1450 for (net::HttpUtil::HeadersIterator i(params.extra_headers.begin(), |
| 1449 params.extra_headers.end(), "\n"); | 1451 params.extra_headers.end(), "\n"); |
| 1450 i.GetNext(); ) { | 1452 i.GetNext(); ) { |
| 1451 request.addHTTPHeaderField(WebString::fromUTF8(i.name()), | 1453 request.addHTTPHeaderField(WebString::fromUTF8(i.name()), |
| 1452 WebString::fromUTF8(i.values())); | 1454 WebString::fromUTF8(i.values())); |
| 1453 } | 1455 } |
| 1454 } | 1456 } |
| 1455 | 1457 |
| 1456 if (navigation_state) | 1458 if (navigation_state) { |
| 1457 navigation_state->set_load_type(NavigationState::NORMAL_LOAD); | 1459 if (params.navigation_type != ViewMsg_Navigate_Params::PRERENDER) { |
| 1460 navigation_state->set_load_type(NavigationState::NORMAL_LOAD); |
| 1461 } else { |
| 1462 navigation_state->set_load_type(NavigationState::PRERENDER_LOAD); |
| 1463 navigation_state->set_is_prerendering(true); |
| 1464 } |
| 1465 } |
| 1458 main_frame->loadRequest(request); | 1466 main_frame->loadRequest(request); |
| 1459 } | 1467 } |
| 1460 | 1468 |
| 1461 // In case LoadRequest failed before DidCreateDataSource was called. | 1469 // In case LoadRequest failed before DidCreateDataSource was called. |
| 1462 pending_navigation_state_.reset(); | 1470 pending_navigation_state_.reset(); |
| 1463 } | 1471 } |
| 1464 | 1472 |
| 1465 // Stop loading the current page | 1473 // Stop loading the current page |
| 1466 void RenderView::OnStop() { | 1474 void RenderView::OnStop() { |
| 1467 if (webview()) | 1475 if (webview()) |
| (...skipping 1234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2702 | 2710 |
| 2703 if (group->IsVulnerable() && | 2711 if (group->IsVulnerable() && |
| 2704 !cmd->HasSwitch(switches::kAllowOutdatedPlugins)) { | 2712 !cmd->HasSwitch(switches::kAllowOutdatedPlugins)) { |
| 2705 Send(new ViewHostMsg_BlockedOutdatedPlugin(routing_id_, | 2713 Send(new ViewHostMsg_BlockedOutdatedPlugin(routing_id_, |
| 2706 group->GetGroupName(), | 2714 group->GetGroupName(), |
| 2707 GURL(group->GetUpdateURL()))); | 2715 GURL(group->GetUpdateURL()))); |
| 2708 return CreatePluginPlaceholder(frame, | 2716 return CreatePluginPlaceholder(frame, |
| 2709 params, | 2717 params, |
| 2710 *group, | 2718 *group, |
| 2711 IDR_BLOCKED_PLUGIN_HTML, | 2719 IDR_BLOCKED_PLUGIN_HTML, |
| 2712 IDS_PLUGIN_OUTDATED); | 2720 IDS_PLUGIN_OUTDATED, |
| 2721 false); |
| 2713 } | 2722 } |
| 2714 | 2723 |
| 2715 if (!info.enabled) | 2724 if (!info.enabled) |
| 2716 return NULL; | 2725 return NULL; |
| 2717 | 2726 |
| 2718 ContentSetting host_setting = | 2727 ContentSetting host_setting = |
| 2719 current_content_settings_.settings[CONTENT_SETTINGS_TYPE_PLUGINS]; | 2728 current_content_settings_.settings[CONTENT_SETTINGS_TYPE_PLUGINS]; |
| 2720 if (info.path.value() == webkit::npapi::kDefaultPluginLibraryName || | 2729 if (info.path.value() == webkit::npapi::kDefaultPluginLibraryName || |
| 2721 plugin_setting == CONTENT_SETTING_ALLOW || | 2730 plugin_setting == CONTENT_SETTING_ALLOW || |
| 2722 host_setting == CONTENT_SETTING_ALLOW) { | 2731 host_setting == CONTENT_SETTING_ALLOW) { |
| 2732 // Delay loading plugins if prerendering. |
| 2733 WebDataSource* ds = frame->dataSource(); |
| 2734 NavigationState* navigation_state = NavigationState::FromDataSource(ds); |
| 2735 if (navigation_state->is_prerendering()) { |
| 2736 return CreatePluginPlaceholder(frame, |
| 2737 params, |
| 2738 *group, |
| 2739 IDR_CLICK_TO_PLAY_PLUGIN_HTML, |
| 2740 IDS_PLUGIN_LOAD, |
| 2741 true); |
| 2742 } |
| 2743 |
| 2723 scoped_refptr<webkit::ppapi::PluginModule> pepper_module( | 2744 scoped_refptr<webkit::ppapi::PluginModule> pepper_module( |
| 2724 pepper_delegate_.CreatePepperPlugin(info.path)); | 2745 pepper_delegate_.CreatePepperPlugin(info.path)); |
| 2725 if (pepper_module) | 2746 if (pepper_module) |
| 2726 return CreatePepperPlugin(frame, params, info.path, pepper_module.get()); | 2747 return CreatePepperPlugin(frame, params, info.path, pepper_module.get()); |
| 2727 return CreateNPAPIPlugin(frame, params, info.path, actual_mime_type); | 2748 return CreateNPAPIPlugin(frame, params, info.path, actual_mime_type); |
| 2728 } | 2749 } |
| 2729 std::string resource; | 2750 std::string resource; |
| 2730 if (cmd->HasSwitch(switches::kEnableResourceContentSettings)) | 2751 if (cmd->HasSwitch(switches::kEnableResourceContentSettings)) |
| 2731 resource = group->identifier(); | 2752 resource = group->identifier(); |
| 2732 DidBlockContentType(CONTENT_SETTINGS_TYPE_PLUGINS, resource); | 2753 DidBlockContentType(CONTENT_SETTINGS_TYPE_PLUGINS, resource); |
| 2733 if (plugin_setting == CONTENT_SETTING_ASK) { | 2754 if (plugin_setting == CONTENT_SETTING_ASK) { |
| 2734 return CreatePluginPlaceholder(frame, | 2755 return CreatePluginPlaceholder(frame, |
| 2735 params, | 2756 params, |
| 2736 *group, | 2757 *group, |
| 2737 IDR_CLICK_TO_PLAY_PLUGIN_HTML, | 2758 IDR_CLICK_TO_PLAY_PLUGIN_HTML, |
| 2738 IDS_PLUGIN_LOAD); | 2759 IDS_PLUGIN_LOAD, |
| 2760 false); |
| 2739 } else { | 2761 } else { |
| 2740 return CreatePluginPlaceholder(frame, | 2762 return CreatePluginPlaceholder(frame, |
| 2741 params, | 2763 params, |
| 2742 *group, | 2764 *group, |
| 2743 IDR_BLOCKED_PLUGIN_HTML, | 2765 IDR_BLOCKED_PLUGIN_HTML, |
| 2744 IDS_PLUGIN_BLOCKED); | 2766 IDS_PLUGIN_BLOCKED, |
| 2767 false); |
| 2745 } | 2768 } |
| 2746 } | 2769 } |
| 2747 | 2770 |
| 2748 WebWorker* RenderView::createWorker(WebFrame* frame, WebWorkerClient* client) { | 2771 WebWorker* RenderView::createWorker(WebFrame* frame, WebWorkerClient* client) { |
| 2749 WebApplicationCacheHostImpl* appcache_host = | 2772 WebApplicationCacheHostImpl* appcache_host = |
| 2750 WebApplicationCacheHostImpl::FromFrame(frame); | 2773 WebApplicationCacheHostImpl::FromFrame(frame); |
| 2751 int appcache_host_id = appcache_host ? appcache_host->host_id() : 0; | 2774 int appcache_host_id = appcache_host ? appcache_host->host_id() : 0; |
| 2752 return new WebWorkerProxy(client, RenderThread::current(), routing_id_, | 2775 return new WebWorkerProxy(client, RenderThread::current(), routing_id_, |
| 2753 appcache_host_id); | 2776 appcache_host_id); |
| 2754 } | 2777 } |
| (...skipping 1614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4369 const std::string& mime_type) { | 4392 const std::string& mime_type) { |
| 4370 return new webkit::npapi::WebPluginImpl( | 4393 return new webkit::npapi::WebPluginImpl( |
| 4371 frame, params, path, mime_type, AsWeakPtr()); | 4394 frame, params, path, mime_type, AsWeakPtr()); |
| 4372 } | 4395 } |
| 4373 | 4396 |
| 4374 WebPlugin* RenderView::CreatePluginPlaceholder( | 4397 WebPlugin* RenderView::CreatePluginPlaceholder( |
| 4375 WebFrame* frame, | 4398 WebFrame* frame, |
| 4376 const WebPluginParams& params, | 4399 const WebPluginParams& params, |
| 4377 const webkit::npapi::PluginGroup& group, | 4400 const webkit::npapi::PluginGroup& group, |
| 4378 int resource_id, | 4401 int resource_id, |
| 4379 int message_id) { | 4402 int message_id, |
| 4403 bool is_blocked_for_prerendering) { |
| 4380 // |blocked_plugin| will delete itself when the WebViewPlugin | 4404 // |blocked_plugin| will delete itself when the WebViewPlugin |
| 4381 // is destroyed. | 4405 // is destroyed. |
| 4382 BlockedPlugin* blocked_plugin = | 4406 BlockedPlugin* blocked_plugin = |
| 4383 new BlockedPlugin(this, | 4407 new BlockedPlugin(this, |
| 4384 frame, | 4408 frame, |
| 4385 group, | 4409 group, |
| 4386 params, | 4410 params, |
| 4387 webkit_preferences_, | 4411 webkit_preferences_, |
| 4388 resource_id, | 4412 resource_id, |
| 4389 l10n_util::GetStringFUTF16(message_id, | 4413 l10n_util::GetStringFUTF16(message_id, |
| 4390 group.GetGroupName())); | 4414 group.GetGroupName()), |
| 4415 is_blocked_for_prerendering); |
| 4391 return blocked_plugin->plugin(); | 4416 return blocked_plugin->plugin(); |
| 4392 } | 4417 } |
| 4393 | 4418 |
| 4394 void RenderView::OnZoom(PageZoom::Function function) { | 4419 void RenderView::OnZoom(PageZoom::Function function) { |
| 4395 if (!webview()) // Not sure if this can happen, but no harm in being safe. | 4420 if (!webview()) // Not sure if this can happen, but no harm in being safe. |
| 4396 return; | 4421 return; |
| 4397 | 4422 |
| 4398 webview()->hidePopups(); | 4423 webview()->hidePopups(); |
| 4399 | 4424 |
| 4400 double old_zoom_level = webview()->zoomLevel(); | 4425 double old_zoom_level = webview()->zoomLevel(); |
| (...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4672 void RenderView::OnRevertTranslation(int page_id) { | 4697 void RenderView::OnRevertTranslation(int page_id) { |
| 4673 translate_helper_.RevertTranslation(page_id); | 4698 translate_helper_.RevertTranslation(page_id); |
| 4674 } | 4699 } |
| 4675 | 4700 |
| 4676 void RenderView::OnInstallMissingPlugin() { | 4701 void RenderView::OnInstallMissingPlugin() { |
| 4677 // This could happen when the first default plugin is deleted. | 4702 // This could happen when the first default plugin is deleted. |
| 4678 if (first_default_plugin_) | 4703 if (first_default_plugin_) |
| 4679 first_default_plugin_->InstallMissingPlugin(); | 4704 first_default_plugin_->InstallMissingPlugin(); |
| 4680 } | 4705 } |
| 4681 | 4706 |
| 4707 void RenderView::OnDisplayPrerenderedPage() { |
| 4708 NavigationState* navigation_state = pending_navigation_state_.get(); |
| 4709 if (!navigation_state) { |
| 4710 WebDataSource* ds = webview()->mainFrame()->dataSource(); |
| 4711 navigation_state = NavigationState::FromDataSource(ds); |
| 4712 } |
| 4713 |
| 4714 DCHECK(navigation_state->is_prerendering()); |
| 4715 navigation_state->set_is_prerendering(false); |
| 4716 } |
| 4717 |
| 4682 void RenderView::OnFileChooserResponse(const std::vector<FilePath>& paths) { | 4718 void RenderView::OnFileChooserResponse(const std::vector<FilePath>& paths) { |
| 4683 // This could happen if we navigated to a different page before the user | 4719 // This could happen if we navigated to a different page before the user |
| 4684 // closed the chooser. | 4720 // closed the chooser. |
| 4685 if (file_chooser_completions_.empty()) | 4721 if (file_chooser_completions_.empty()) |
| 4686 return; | 4722 return; |
| 4687 | 4723 |
| 4688 WebVector<WebString> ws_file_names(paths.size()); | 4724 WebVector<WebString> ws_file_names(paths.size()); |
| 4689 for (size_t i = 0; i < paths.size(); ++i) | 4725 for (size_t i = 0; i < paths.size(); ++i) |
| 4690 ws_file_names[i] = webkit_glue::FilePathToWebString(paths[i]); | 4726 ws_file_names[i] = webkit_glue::FilePathToWebString(paths[i]); |
| 4691 | 4727 |
| (...skipping 994 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5686 if (cmd == kJavaScriptStressTestSetStressRunType) { | 5722 if (cmd == kJavaScriptStressTestSetStressRunType) { |
| 5687 v8::Testing::SetStressRunType(static_cast<v8::Testing::StressType>(param)); | 5723 v8::Testing::SetStressRunType(static_cast<v8::Testing::StressType>(param)); |
| 5688 } else if (cmd == kJavaScriptStressTestPrepareStressRun) { | 5724 } else if (cmd == kJavaScriptStressTestPrepareStressRun) { |
| 5689 v8::Testing::PrepareStressRun(param); | 5725 v8::Testing::PrepareStressRun(param); |
| 5690 } | 5726 } |
| 5691 } | 5727 } |
| 5692 | 5728 |
| 5693 void RenderView::OnContextMenuClosed() { | 5729 void RenderView::OnContextMenuClosed() { |
| 5694 context_menu_node_.reset(); | 5730 context_menu_node_.reset(); |
| 5695 } | 5731 } |
| OLD | NEW |