| Index: chrome/browser/renderer_host/render_view_host.cc
|
| ===================================================================
|
| --- chrome/browser/renderer_host/render_view_host.cc (revision 75488)
|
| +++ chrome/browser/renderer_host/render_view_host.cc (working copy)
|
| @@ -1,1712 +0,0 @@
|
| -// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/renderer_host/render_view_host.h"
|
| -
|
| -#include <string>
|
| -#include <utility>
|
| -#include <vector>
|
| -
|
| -#include "base/command_line.h"
|
| -#include "base/i18n/rtl.h"
|
| -#include "base/json/json_reader.h"
|
| -#include "base/string_util.h"
|
| -#include "base/time.h"
|
| -#include "base/utf_string_conversions.h"
|
| -#include "base/values.h"
|
| -#include "chrome/browser/child_process_security_policy.h"
|
| -#include "chrome/browser/cross_site_request_manager.h"
|
| -#include "chrome/browser/debugger/devtools_manager.h"
|
| -#include "chrome/browser/dom_operation_notification_details.h"
|
| -#include "chrome/browser/extensions/extension_message_service.h"
|
| -#include "chrome/browser/in_process_webkit/session_storage_namespace.h"
|
| -#include "chrome/browser/metrics/user_metrics.h"
|
| -#include "chrome/browser/net/predictor_api.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/renderer_host/render_process_host.h"
|
| -#include "chrome/browser/renderer_host/render_view_host_delegate.h"
|
| -#include "chrome/browser/renderer_host/render_widget_host.h"
|
| -#include "chrome/browser/renderer_host/render_widget_host_view.h"
|
| -#include "chrome/browser/renderer_host/site_instance.h"
|
| -#include "chrome/common/bindings_policy.h"
|
| -#include "chrome/common/chrome_constants.h"
|
| -#include "chrome/common/chrome_switches.h"
|
| -#include "chrome/common/native_web_keyboard_event.h"
|
| -#include "chrome/common/net/url_request_context_getter.h"
|
| -#include "chrome/common/notification_details.h"
|
| -#include "chrome/common/notification_service.h"
|
| -#include "chrome/common/notification_type.h"
|
| -#include "chrome/common/render_messages.h"
|
| -#include "chrome/common/render_messages_params.h"
|
| -#include "chrome/common/result_codes.h"
|
| -#include "chrome/common/thumbnail_score.h"
|
| -#include "chrome/common/translate_errors.h"
|
| -#include "chrome/common/url_constants.h"
|
| -#include "chrome/common/web_apps.h"
|
| -#include "net/base/net_util.h"
|
| -#include "printing/native_metafile.h"
|
| -#include "third_party/skia/include/core/SkBitmap.h"
|
| -#include "third_party/WebKit/Source/WebKit/chromium/public/WebFindOptions.h"
|
| -#include "ui/gfx/native_widget_types.h"
|
| -#include "webkit/glue/context_menu.h"
|
| -#include "webkit/glue/webaccessibility.h"
|
| -#include "webkit/glue/webdropdata.h"
|
| -
|
| -using base::TimeDelta;
|
| -using WebKit::WebConsoleMessage;
|
| -using WebKit::WebDragOperation;
|
| -using WebKit::WebDragOperationNone;
|
| -using WebKit::WebDragOperationsMask;
|
| -using WebKit::WebFindOptions;
|
| -using WebKit::WebInputEvent;
|
| -using WebKit::WebMediaPlayerAction;
|
| -using WebKit::WebTextDirection;
|
| -
|
| -namespace {
|
| -
|
| -// Delay to wait on closing the tab for a beforeunload/unload handler to fire.
|
| -const int kUnloadTimeoutMS = 1000;
|
| -
|
| -} // namespace
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -// RenderViewHost, public:
|
| -
|
| -// static
|
| -RenderViewHost* RenderViewHost::FromID(int render_process_id,
|
| - int render_view_id) {
|
| - RenderProcessHost* process = RenderProcessHost::FromID(render_process_id);
|
| - if (!process)
|
| - return NULL;
|
| - RenderWidgetHost* widget = static_cast<RenderWidgetHost*>(
|
| - process->GetListenerByID(render_view_id));
|
| - if (!widget || !widget->IsRenderView())
|
| - return NULL;
|
| - return static_cast<RenderViewHost*>(widget);
|
| -}
|
| -
|
| -RenderViewHost::RenderViewHost(SiteInstance* instance,
|
| - RenderViewHostDelegate* delegate,
|
| - int routing_id,
|
| - SessionStorageNamespace* session_storage)
|
| - : RenderWidgetHost(instance->GetProcess(), routing_id),
|
| - instance_(instance),
|
| - delegate_(delegate),
|
| - waiting_for_drag_context_response_(false),
|
| - enabled_bindings_(0),
|
| - pending_request_id_(0),
|
| - navigations_suspended_(false),
|
| - suspended_nav_message_(NULL),
|
| - run_modal_reply_msg_(NULL),
|
| - is_waiting_for_beforeunload_ack_(false),
|
| - is_waiting_for_unload_ack_(false),
|
| - unload_ack_is_for_cross_site_transition_(false),
|
| - are_javascript_messages_suppressed_(false),
|
| - sudden_termination_allowed_(false),
|
| - session_storage_namespace_(session_storage),
|
| - is_extension_process_(false),
|
| - save_accessibility_tree_for_testing_(false),
|
| - render_view_termination_status_(base::TERMINATION_STATUS_STILL_RUNNING) {
|
| - if (!session_storage_namespace_) {
|
| - session_storage_namespace_ =
|
| - new SessionStorageNamespace(process()->profile());
|
| - }
|
| -
|
| - DCHECK(instance_);
|
| - DCHECK(delegate_);
|
| -}
|
| -
|
| -RenderViewHost::~RenderViewHost() {
|
| - delegate()->RenderViewDeleted(this);
|
| -
|
| - // Be sure to clean up any leftover state from cross-site requests.
|
| - CrossSiteRequestManager::GetInstance()->SetHasPendingCrossSiteRequest(
|
| - process()->id(), routing_id(), false);
|
| -}
|
| -
|
| -bool RenderViewHost::CreateRenderView(const string16& frame_name) {
|
| - DCHECK(!IsRenderViewLive()) << "Creating view twice";
|
| -
|
| - // The process may (if we're sharing a process with another host that already
|
| - // initialized it) or may not (we have our own process or the old process
|
| - // crashed) have been initialized. Calling Init multiple times will be
|
| - // ignored, so this is safe.
|
| - if (!process()->Init(renderer_accessible(), is_extension_process_))
|
| - return false;
|
| - DCHECK(process()->HasConnection());
|
| - DCHECK(process()->profile());
|
| -
|
| - if (BindingsPolicy::is_web_ui_enabled(enabled_bindings_)) {
|
| - ChildProcessSecurityPolicy::GetInstance()->GrantWebUIBindings(
|
| - process()->id());
|
| - }
|
| -
|
| - if (BindingsPolicy::is_extension_enabled(enabled_bindings_)) {
|
| - ChildProcessSecurityPolicy::GetInstance()->GrantExtensionBindings(
|
| - process()->id());
|
| -
|
| - // Extensions may have permission to access chrome:// URLs.
|
| - ChildProcessSecurityPolicy::GetInstance()->GrantScheme(
|
| - process()->id(), chrome::kChromeUIScheme);
|
| - }
|
| -
|
| - renderer_initialized_ = true;
|
| -
|
| - ViewMsg_New_Params params;
|
| - params.parent_window = GetNativeViewId();
|
| - params.renderer_preferences =
|
| - delegate_->GetRendererPrefs(process()->profile());
|
| - params.web_preferences = delegate_->GetWebkitPrefs();
|
| - params.view_id = routing_id();
|
| - params.session_storage_namespace_id = session_storage_namespace_->id();
|
| - params.frame_name = frame_name;
|
| - Send(new ViewMsg_New(params));
|
| -
|
| - // Set the alternate error page, which is profile specific, in the renderer.
|
| - GURL url = delegate_->GetAlternateErrorPageURL();
|
| - SetAlternateErrorPageURL(url);
|
| -
|
| - // If it's enabled, tell the renderer to set up the Javascript bindings for
|
| - // sending messages back to the browser.
|
| - Send(new ViewMsg_AllowBindings(routing_id(), enabled_bindings_));
|
| - UpdateBrowserWindowId(delegate_->GetBrowserWindowID());
|
| - Send(new ViewMsg_NotifyRenderViewType(routing_id(),
|
| - delegate_->GetRenderViewType()));
|
| - // Let our delegate know that we created a RenderView.
|
| - delegate_->RenderViewCreated(this);
|
| - process()->ViewCreated();
|
| -
|
| - return true;
|
| -}
|
| -
|
| -bool RenderViewHost::IsRenderViewLive() const {
|
| - return process()->HasConnection() && renderer_initialized_;
|
| -}
|
| -
|
| -void RenderViewHost::SyncRendererPrefs() {
|
| - Send(new ViewMsg_SetRendererPrefs(routing_id(),
|
| - delegate_->GetRendererPrefs(
|
| - process()->profile())));
|
| -}
|
| -
|
| -void RenderViewHost::Navigate(const ViewMsg_Navigate_Params& params) {
|
| - ChildProcessSecurityPolicy::GetInstance()->GrantRequestURL(
|
| - process()->id(), params.url);
|
| -
|
| - ViewMsg_Navigate* nav_message = new ViewMsg_Navigate(routing_id(), params);
|
| -
|
| - // Only send the message if we aren't suspended at the start of a cross-site
|
| - // request.
|
| - if (navigations_suspended_) {
|
| - // Shouldn't be possible to have a second navigation while suspended, since
|
| - // navigations will only be suspended during a cross-site request. If a
|
| - // second navigation occurs, TabContents will cancel this pending RVH
|
| - // create a new pending RVH.
|
| - DCHECK(!suspended_nav_message_.get());
|
| - suspended_nav_message_.reset(nav_message);
|
| - } else {
|
| - // Unset this, otherwise if true and the hang monitor fires we'll
|
| - // incorrectly close the tab.
|
| - is_waiting_for_unload_ack_ = false;
|
| -
|
| - Send(nav_message);
|
| -
|
| - // Force the throbber to start. We do this because WebKit's "started
|
| - // loading" message will be received asynchronously from the UI of the
|
| - // browser. But we want to keep the throbber in sync with what's happening
|
| - // in the UI. For example, we want to start throbbing immediately when the
|
| - // user naivgates even if the renderer is delayed. There is also an issue
|
| - // with the throbber starting because the WebUI (which controls whether the
|
| - // favicon is displayed) happens synchronously. If the start loading
|
| - // messages was asynchronous, then the default favicon would flash in.
|
| - //
|
| - // WebKit doesn't send throb notifications for JavaScript URLs, so we
|
| - // don't want to either.
|
| - if (!params.url.SchemeIs(chrome::kJavaScriptScheme))
|
| - delegate_->DidStartLoading();
|
| - }
|
| - const GURL& url = params.url;
|
| - if (!delegate_->IsExternalTabContainer() &&
|
| - (url.SchemeIs("http") || url.SchemeIs("https")))
|
| - chrome_browser_net::PreconnectUrlAndSubresources(url);
|
| -}
|
| -
|
| -void RenderViewHost::NavigateToURL(const GURL& url) {
|
| - ViewMsg_Navigate_Params params;
|
| - params.page_id = -1;
|
| - params.url = url;
|
| - params.transition = PageTransition::LINK;
|
| - params.navigation_type = ViewMsg_Navigate_Params::NORMAL;
|
| - Navigate(params);
|
| -}
|
| -
|
| -void RenderViewHost::SetNavigationsSuspended(bool suspend) {
|
| - // This should only be called to toggle the state.
|
| - DCHECK(navigations_suspended_ != suspend);
|
| -
|
| - navigations_suspended_ = suspend;
|
| - if (!suspend && suspended_nav_message_.get()) {
|
| - // There's a navigation message waiting to be sent. Now that we're not
|
| - // suspended anymore, resume navigation by sending it.
|
| - Send(suspended_nav_message_.release());
|
| - }
|
| -}
|
| -
|
| -void RenderViewHost::FirePageBeforeUnload(bool for_cross_site_transition) {
|
| - if (!IsRenderViewLive()) {
|
| - // This RenderViewHost doesn't have a live renderer, so just skip running
|
| - // the onbeforeunload handler.
|
| - is_waiting_for_beforeunload_ack_ = true; // Checked by OnMsgShouldCloseACK.
|
| - unload_ack_is_for_cross_site_transition_ = for_cross_site_transition;
|
| - OnMsgShouldCloseACK(true);
|
| - return;
|
| - }
|
| -
|
| - // This may be called more than once (if the user clicks the tab close button
|
| - // several times, or if she clicks the tab close button then the browser close
|
| - // button), and we only send the message once.
|
| - if (is_waiting_for_beforeunload_ack_) {
|
| - // Some of our close messages could be for the tab, others for cross-site
|
| - // transitions. We always want to think it's for closing the tab if any
|
| - // of the messages were, since otherwise it might be impossible to close
|
| - // (if there was a cross-site "close" request pending when the user clicked
|
| - // the close button). We want to keep the "for cross site" flag only if
|
| - // both the old and the new ones are also for cross site.
|
| - unload_ack_is_for_cross_site_transition_ =
|
| - unload_ack_is_for_cross_site_transition_ && for_cross_site_transition;
|
| - } else {
|
| - // Start the hang monitor in case the renderer hangs in the beforeunload
|
| - // handler.
|
| - is_waiting_for_beforeunload_ack_ = true;
|
| - unload_ack_is_for_cross_site_transition_ = for_cross_site_transition;
|
| - StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS));
|
| - Send(new ViewMsg_ShouldClose(routing_id()));
|
| - }
|
| -}
|
| -
|
| -void RenderViewHost::ClosePage(bool for_cross_site_transition,
|
| - int new_render_process_host_id,
|
| - int new_request_id) {
|
| - // In most cases, this will not be set to false afterward. Either the tab
|
| - // will be closed, or a pending RenderViewHost will replace this one.
|
| - is_waiting_for_unload_ack_ = true;
|
| - // Start the hang monitor in case the renderer hangs in the unload handler.
|
| - StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS));
|
| -
|
| - ViewMsg_ClosePage_Params params;
|
| - params.closing_process_id = process()->id();
|
| - params.closing_route_id = routing_id();
|
| - params.for_cross_site_transition = for_cross_site_transition;
|
| - params.new_render_process_host_id = new_render_process_host_id;
|
| - params.new_request_id = new_request_id;
|
| - if (IsRenderViewLive()) {
|
| - NotificationService::current()->Notify(
|
| - NotificationType::RENDER_VIEW_HOST_WILL_CLOSE_RENDER_VIEW,
|
| - Source<RenderViewHost>(this),
|
| - NotificationService::NoDetails());
|
| -
|
| - Send(new ViewMsg_ClosePage(routing_id(), params));
|
| - } else {
|
| - // This RenderViewHost doesn't have a live renderer, so just skip closing
|
| - // the page. We must notify the ResourceDispatcherHost on the IO thread,
|
| - // which we will do through the RenderProcessHost's widget helper.
|
| - process()->CrossSiteClosePageACK(params);
|
| - }
|
| -}
|
| -
|
| -void RenderViewHost::ClosePageIgnoringUnloadEvents() {
|
| - StopHangMonitorTimeout();
|
| - is_waiting_for_beforeunload_ack_ = false;
|
| - is_waiting_for_unload_ack_ = false;
|
| -
|
| - sudden_termination_allowed_ = true;
|
| - delegate_->Close(this);
|
| -}
|
| -
|
| -void RenderViewHost::SetHasPendingCrossSiteRequest(bool has_pending_request,
|
| - int request_id) {
|
| - CrossSiteRequestManager::GetInstance()->SetHasPendingCrossSiteRequest(
|
| - process()->id(), routing_id(), has_pending_request);
|
| - pending_request_id_ = request_id;
|
| -}
|
| -
|
| -int RenderViewHost::GetPendingRequestId() {
|
| - return pending_request_id_;
|
| -}
|
| -
|
| -RenderViewHost::CommandState RenderViewHost::GetStateForCommand(
|
| - RenderViewCommand command) const {
|
| - if (command != RENDER_VIEW_COMMAND_TOGGLE_SPELL_CHECK)
|
| - LOG(DFATAL) << "Unknown command " << command;
|
| -
|
| - std::map<RenderViewCommand, CommandState>::const_iterator it =
|
| - command_states_.find(command);
|
| - if (it == command_states_.end()) {
|
| - CommandState state;
|
| - state.is_enabled = false;
|
| - state.checked_state = RENDER_VIEW_COMMAND_CHECKED_STATE_UNCHECKED;
|
| - return state;
|
| - }
|
| - return it->second;
|
| -}
|
| -
|
| -void RenderViewHost::Stop() {
|
| - Send(new ViewMsg_Stop(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::ReloadFrame() {
|
| - Send(new ViewMsg_ReloadFrame(routing_id()));
|
| -}
|
| -
|
| -bool RenderViewHost::PrintPages() {
|
| - return Send(new ViewMsg_PrintPages(routing_id()));
|
| -}
|
| -
|
| -bool RenderViewHost::PrintPreview() {
|
| - return Send(new ViewMsg_PrintPreview(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::PrintingDone(int document_cookie, bool success) {
|
| - Send(new ViewMsg_PrintingDone(routing_id(), document_cookie, success));
|
| -}
|
| -
|
| -void RenderViewHost::StartFinding(int request_id,
|
| - const string16& search_text,
|
| - bool forward,
|
| - bool match_case,
|
| - bool find_next) {
|
| - if (search_text.empty())
|
| - return;
|
| -
|
| - WebFindOptions options;
|
| - options.forward = forward;
|
| - options.matchCase = match_case;
|
| - options.findNext = find_next;
|
| - Send(new ViewMsg_Find(routing_id(), request_id, search_text, options));
|
| -
|
| - // This call is asynchronous and returns immediately.
|
| - // The result of the search is sent as a notification message by the renderer.
|
| -}
|
| -
|
| -void RenderViewHost::StopFinding(
|
| - FindBarController::SelectionAction selection_action) {
|
| - ViewMsg_StopFinding_Params params;
|
| -
|
| - switch (selection_action) {
|
| - case FindBarController::kClearSelection:
|
| - params.action = ViewMsg_StopFinding_Params::kClearSelection;
|
| - break;
|
| - case FindBarController::kKeepSelection:
|
| - params.action = ViewMsg_StopFinding_Params::kKeepSelection;
|
| - break;
|
| - case FindBarController::kActivateSelection:
|
| - params.action = ViewMsg_StopFinding_Params::kActivateSelection;
|
| - break;
|
| - default:
|
| - NOTREACHED();
|
| - params.action = ViewMsg_StopFinding_Params::kKeepSelection;
|
| - }
|
| - Send(new ViewMsg_StopFinding(routing_id(), params));
|
| -}
|
| -
|
| -void RenderViewHost::Zoom(PageZoom::Function function) {
|
| - Send(new ViewMsg_Zoom(routing_id(), function));
|
| -}
|
| -
|
| -void RenderViewHost::SetZoomLevel(double zoom_level) {
|
| - Send(new ViewMsg_SetZoomLevel(routing_id(), zoom_level));
|
| -}
|
| -
|
| -void RenderViewHost::SetPageEncoding(const std::string& encoding_name) {
|
| - Send(new ViewMsg_SetPageEncoding(routing_id(), encoding_name));
|
| -}
|
| -
|
| -void RenderViewHost::ResetPageEncodingToDefault() {
|
| - Send(new ViewMsg_ResetPageEncodingToDefault(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::SetAlternateErrorPageURL(const GURL& url) {
|
| - Send(new ViewMsg_SetAltErrorPageURL(routing_id(), url));
|
| -}
|
| -
|
| -void RenderViewHost::DragTargetDragEnter(
|
| - const WebDropData& drop_data,
|
| - const gfx::Point& client_pt,
|
| - const gfx::Point& screen_pt,
|
| - WebDragOperationsMask operations_allowed) {
|
| - // Grant the renderer the ability to load the drop_data.
|
| - ChildProcessSecurityPolicy* policy =
|
| - ChildProcessSecurityPolicy::GetInstance();
|
| - policy->GrantRequestURL(process()->id(), drop_data.url);
|
| - for (std::vector<string16>::const_iterator iter(drop_data.filenames.begin());
|
| - iter != drop_data.filenames.end(); ++iter) {
|
| - FilePath path = FilePath::FromWStringHack(UTF16ToWideHack(*iter));
|
| - policy->GrantRequestURL(process()->id(),
|
| - net::FilePathToFileURL(path));
|
| - policy->GrantReadFile(process()->id(), path);
|
| - }
|
| - Send(new ViewMsg_DragTargetDragEnter(routing_id(), drop_data, client_pt,
|
| - screen_pt, operations_allowed));
|
| -}
|
| -
|
| -void RenderViewHost::DragTargetDragOver(
|
| - const gfx::Point& client_pt, const gfx::Point& screen_pt,
|
| - WebDragOperationsMask operations_allowed) {
|
| - Send(new ViewMsg_DragTargetDragOver(routing_id(), client_pt, screen_pt,
|
| - operations_allowed));
|
| -}
|
| -
|
| -void RenderViewHost::DragTargetDragLeave() {
|
| - Send(new ViewMsg_DragTargetDragLeave(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::DragTargetDrop(
|
| - const gfx::Point& client_pt, const gfx::Point& screen_pt) {
|
| - Send(new ViewMsg_DragTargetDrop(routing_id(), client_pt, screen_pt));
|
| -}
|
| -
|
| -void RenderViewHost::ReservePageIDRange(int size) {
|
| - Send(new ViewMsg_ReservePageIDRange(routing_id(), size));
|
| -}
|
| -
|
| -void RenderViewHost::ExecuteJavascriptInWebFrame(
|
| - const string16& frame_xpath,
|
| - const string16& jscript) {
|
| - Send(new ViewMsg_ScriptEvalRequest(routing_id(), frame_xpath, jscript,
|
| - 0, false));
|
| -}
|
| -
|
| -int RenderViewHost::ExecuteJavascriptInWebFrameNotifyResult(
|
| - const string16& frame_xpath,
|
| - const string16& jscript) {
|
| - static int next_id = 1;
|
| - Send(new ViewMsg_ScriptEvalRequest(routing_id(), frame_xpath, jscript,
|
| - next_id, true));
|
| - return next_id++;
|
| -}
|
| -
|
| -void RenderViewHost::InsertCSSInWebFrame(
|
| - const std::wstring& frame_xpath,
|
| - const std::string& css,
|
| - const std::string& id) {
|
| - Send(new ViewMsg_CSSInsertRequest(routing_id(), frame_xpath, css, id));
|
| -}
|
| -
|
| -void RenderViewHost::AddMessageToConsole(
|
| - const string16& frame_xpath,
|
| - const string16& message,
|
| - const WebConsoleMessage::Level& level) {
|
| - Send(new ViewMsg_AddMessageToConsole(
|
| - routing_id(), frame_xpath, message, level));
|
| -}
|
| -
|
| -void RenderViewHost::Undo() {
|
| - Send(new ViewMsg_Undo(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::Redo() {
|
| - Send(new ViewMsg_Redo(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::Cut() {
|
| - Send(new ViewMsg_Cut(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::Copy() {
|
| - Send(new ViewMsg_Copy(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::CopyToFindPboard() {
|
| -#if defined(OS_MACOSX)
|
| - // Windows/Linux don't have the concept of a find pasteboard.
|
| - Send(new ViewMsg_CopyToFindPboard(routing_id()));
|
| -#endif
|
| -}
|
| -
|
| -void RenderViewHost::Paste() {
|
| - Send(new ViewMsg_Paste(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::ToggleSpellCheck() {
|
| - Send(new ViewMsg_ToggleSpellCheck(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::Delete() {
|
| - Send(new ViewMsg_Delete(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::SelectAll() {
|
| - Send(new ViewMsg_SelectAll(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::ToggleSpellPanel(bool is_currently_visible) {
|
| - Send(new ViewMsg_ToggleSpellPanel(routing_id(), is_currently_visible));
|
| -}
|
| -
|
| -int RenderViewHost::DownloadFavIcon(const GURL& url, int image_size) {
|
| - if (!url.is_valid()) {
|
| - NOTREACHED();
|
| - return 0;
|
| - }
|
| - static int next_id = 1;
|
| - int id = next_id++;
|
| - Send(new ViewMsg_DownloadFavIcon(routing_id(), id, url, image_size));
|
| - return id;
|
| -}
|
| -
|
| -void RenderViewHost::GetApplicationInfo(int32 page_id) {
|
| - Send(new ViewMsg_GetApplicationInfo(routing_id(), page_id));
|
| -}
|
| -
|
| -void RenderViewHost::CaptureThumbnail() {
|
| - Send(new ViewMsg_CaptureThumbnail(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::CaptureSnapshot() {
|
| - Send(new ViewMsg_CaptureSnapshot(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::JavaScriptMessageBoxClosed(IPC::Message* reply_msg,
|
| - bool success,
|
| - const std::wstring& prompt) {
|
| - process()->set_ignore_input_events(false);
|
| - bool is_waiting =
|
| - is_waiting_for_beforeunload_ack_ || is_waiting_for_unload_ack_;
|
| - if (is_waiting)
|
| - StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS));
|
| -
|
| - ViewHostMsg_RunJavaScriptMessage::WriteReplyParams(reply_msg,
|
| - success, prompt);
|
| - Send(reply_msg);
|
| -
|
| - // If we are waiting for an unload or beforeunload ack and the user has
|
| - // suppressed messages, kill the tab immediately; a page that's spamming
|
| - // alerts in onbeforeunload is presumably malicious, so there's no point in
|
| - // continuing to run its script and dragging out the process.
|
| - // This must be done after sending the reply since RenderView can't close
|
| - // correctly while waiting for a response.
|
| - if (is_waiting && are_javascript_messages_suppressed_)
|
| - delegate_->RendererUnresponsive(this, is_waiting);
|
| -}
|
| -
|
| -void RenderViewHost::ModalHTMLDialogClosed(IPC::Message* reply_msg,
|
| - const std::string& json_retval) {
|
| - if (is_waiting_for_beforeunload_ack_ || is_waiting_for_unload_ack_)
|
| - StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS));
|
| -
|
| - ViewHostMsg_ShowModalHTMLDialog::WriteReplyParams(reply_msg, json_retval);
|
| - Send(reply_msg);
|
| -}
|
| -
|
| -void RenderViewHost::CopyImageAt(int x, int y) {
|
| - Send(new ViewMsg_CopyImageAt(routing_id(), x, y));
|
| -}
|
| -
|
| -void RenderViewHost::DragSourceEndedAt(
|
| - int client_x, int client_y, int screen_x, int screen_y,
|
| - WebDragOperation operation) {
|
| - Send(new ViewMsg_DragSourceEndedOrMoved(
|
| - routing_id(),
|
| - gfx::Point(client_x, client_y),
|
| - gfx::Point(screen_x, screen_y),
|
| - true, operation));
|
| -}
|
| -
|
| -void RenderViewHost::DragSourceMovedTo(
|
| - int client_x, int client_y, int screen_x, int screen_y) {
|
| - Send(new ViewMsg_DragSourceEndedOrMoved(
|
| - routing_id(),
|
| - gfx::Point(client_x, client_y),
|
| - gfx::Point(screen_x, screen_y),
|
| - false, WebDragOperationNone));
|
| -}
|
| -
|
| -void RenderViewHost::DragSourceSystemDragEnded() {
|
| - Send(new ViewMsg_DragSourceSystemDragEnded(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::AllowBindings(int bindings_flags) {
|
| - DCHECK(!renderer_initialized_);
|
| - enabled_bindings_ |= bindings_flags;
|
| -}
|
| -
|
| -void RenderViewHost::SetWebUIProperty(const std::string& name,
|
| - const std::string& value) {
|
| - DCHECK(BindingsPolicy::is_web_ui_enabled(enabled_bindings_));
|
| - Send(new ViewMsg_SetWebUIProperty(routing_id(), name, value));
|
| -}
|
| -
|
| -void RenderViewHost::GotFocus() {
|
| - RenderWidgetHost::GotFocus(); // Notifies the renderer it got focus.
|
| -
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - if (view)
|
| - view->GotFocus();
|
| -}
|
| -
|
| -void RenderViewHost::LostCapture() {
|
| - RenderWidgetHost::LostCapture();
|
| -
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - if (view)
|
| - view->LostCapture();
|
| -}
|
| -
|
| -void RenderViewHost::SetInitialFocus(bool reverse) {
|
| - Send(new ViewMsg_SetInitialFocus(routing_id(), reverse));
|
| -}
|
| -
|
| -void RenderViewHost::ClearFocusedNode() {
|
| - Send(new ViewMsg_ClearFocusedNode(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::ScrollFocusedEditableNodeIntoView() {
|
| - Send(new ViewMsg_ScrollFocusedEditableNodeIntoView(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::UpdateWebPreferences(const WebPreferences& prefs) {
|
| - Send(new ViewMsg_UpdateWebPreferences(routing_id(), prefs));
|
| -}
|
| -
|
| -void RenderViewHost::InstallMissingPlugin() {
|
| - Send(new ViewMsg_InstallMissingPlugin(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::LoadBlockedPlugins() {
|
| - Send(new ViewMsg_LoadBlockedPlugins(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::FilesSelectedInChooser(
|
| - const std::vector<FilePath>& files) {
|
| - // Grant the security access requested to the given files.
|
| - for (std::vector<FilePath>::const_iterator file = files.begin();
|
| - file != files.end(); ++file) {
|
| - ChildProcessSecurityPolicy::GetInstance()->GrantReadFile(
|
| - process()->id(), *file);
|
| - }
|
| - Send(new ViewMsg_RunFileChooserResponse(routing_id(), files));
|
| -}
|
| -
|
| -void RenderViewHost::LoadStateChanged(const GURL& url,
|
| - net::LoadState load_state,
|
| - uint64 upload_position,
|
| - uint64 upload_size) {
|
| - delegate_->LoadStateChanged(url, load_state, upload_position, upload_size);
|
| -}
|
| -
|
| -bool RenderViewHost::SuddenTerminationAllowed() const {
|
| - return sudden_termination_allowed_ || process()->sudden_termination_allowed();
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -// RenderViewHost, IPC message handlers:
|
| -
|
| -bool RenderViewHost::OnMessageReceived(const IPC::Message& msg) {
|
| -#if defined(OS_WIN)
|
| - // On Windows there's a potential deadlock with sync messsages going in
|
| - // a circle from browser -> plugin -> renderer -> browser.
|
| - // On Linux we can avoid this by avoiding sync messages from browser->plugin.
|
| - // On Mac we avoid this by not supporting windowed plugins.
|
| - if (msg.is_sync() && !msg.is_caller_pumping_messages()) {
|
| - // NOTE: IF YOU HIT THIS ASSERT, THE SOLUTION IS ALMOST NEVER TO RUN A
|
| - // NESTED MESSAGE LOOP IN THE RENDERER!!!
|
| - // That introduces reentrancy which causes hard to track bugs. You should
|
| - // find a way to either turn this into an asynchronous message, or one
|
| - // that can be answered on the IO thread.
|
| - NOTREACHED() << "Can't send sync messages to UI thread without pumping "
|
| - "messages in the renderer or else deadlocks can occur if the page "
|
| - "has windowed plugins! (message type " << msg.type() << ")";
|
| - IPC::Message* reply = IPC::SyncMessage::GenerateReply(&msg);
|
| - reply->set_reply_error();
|
| - Send(reply);
|
| - return true;
|
| - }
|
| -#endif
|
| -
|
| - if (delegate_->OnMessageReceived(msg))
|
| - return true;
|
| -
|
| - bool handled = true;
|
| - bool msg_is_ok = true;
|
| - IPC_BEGIN_MESSAGE_MAP_EX(RenderViewHost, msg, msg_is_ok)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_ShowView, OnMsgShowView)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_ShowWidget, OnMsgShowWidget)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_ShowFullscreenWidget,
|
| - OnMsgShowFullscreenWidget)
|
| - IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_RunModal, OnMsgRunModal)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_RenderViewReady, OnMsgRenderViewReady)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_RenderViewGone, OnMsgRenderViewGone)
|
| - IPC_MESSAGE_HANDLER_GENERIC(ViewHostMsg_FrameNavigate, OnMsgNavigate(msg))
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateState, OnMsgUpdateState)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateTitle, OnMsgUpdateTitle)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateEncoding, OnMsgUpdateEncoding)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateTargetURL, OnMsgUpdateTargetURL)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_Thumbnail, OnMsgThumbnail)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_Snapshot, OnMsgScreenshot)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateInspectorSetting,
|
| - OnUpdateInspectorSetting)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_Close, OnMsgClose)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_RequestMove, OnMsgRequestMove)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_DidStartLoading, OnMsgDidStartLoading)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_DidStopLoading, OnMsgDidStopLoading)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_DidChangeLoadProgress,
|
| - OnMsgDidChangeLoadProgress)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_DocumentAvailableInMainFrame,
|
| - OnMsgDocumentAvailableInMainFrame)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_DocumentOnLoadCompletedInMainFrame,
|
| - OnMsgDocumentOnLoadCompletedInMainFrame)
|
| - IPC_MESSAGE_HANDLER(ViewMsg_ExecuteCodeFinished,
|
| - OnExecuteCodeFinished)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_ContextMenu, OnMsgContextMenu)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_OpenURL, OnMsgOpenURL)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_DidContentsPreferredSizeChange,
|
| - OnMsgDidContentsPreferredSizeChange)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_DomOperationResponse,
|
| - OnMsgDomOperationResponse)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_WebUISend, OnMsgWebUISend)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_ForwardMessageToExternalHost,
|
| - OnMsgForwardMessageToExternalHost)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_SetTooltipText, OnMsgSetTooltipText)
|
| - IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_RunJavaScriptMessage,
|
| - OnMsgRunJavaScriptMessage)
|
| - IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_RunBeforeUnloadConfirm,
|
| - OnMsgRunBeforeUnloadConfirm)
|
| - IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_ShowModalHTMLDialog,
|
| - OnMsgShowModalHTMLDialog)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_StartDragging, OnMsgStartDragging)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateDragCursor, OnUpdateDragCursor)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_TakeFocus, OnTakeFocus)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_AddMessageToConsole, OnAddMessageToConsole)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_ForwardToDevToolsAgent,
|
| - OnForwardToDevToolsAgent)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_ForwardToDevToolsClient,
|
| - OnForwardToDevToolsClient)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_ActivateDevToolsWindow,
|
| - OnActivateDevToolsWindow)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_CloseDevToolsWindow,
|
| - OnCloseDevToolsWindow)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_RequestDockDevToolsWindow,
|
| - OnRequestDockDevToolsWindow)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_RequestUndockDevToolsWindow,
|
| - OnRequestUndockDevToolsWindow)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_DevToolsRuntimePropertyChanged,
|
| - OnDevToolsRuntimePropertyChanged)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_ShouldClose_ACK, OnMsgShouldCloseACK)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_ExtensionRequest, OnExtensionRequest)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_SelectionChanged, OnMsgSelectionChanged)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_ExtensionPostMessage,
|
| - OnExtensionPostMessage)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_AccessibilityNotifications,
|
| - OnAccessibilityNotifications)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_OnCSSInserted, OnCSSInserted)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_ContentBlocked, OnContentBlocked)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_AppCacheAccessed, OnAppCacheAccessed)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_WebDatabaseAccessed, OnWebDatabaseAccessed)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_FocusedNodeChanged, OnMsgFocusedNodeChanged)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateZoomLimits, OnUpdateZoomLimits)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_ScriptEvalResponse, OnScriptEvalResponse)
|
| -#if defined(OS_MACOSX)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_ShowPopup, OnMsgShowPopup)
|
| -#endif
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_CommandStateChanged,
|
| - OnCommandStateChanged)
|
| - // Have the super handle all other messages.
|
| - IPC_MESSAGE_UNHANDLED(handled = RenderWidgetHost::OnMessageReceived(msg))
|
| - IPC_END_MESSAGE_MAP_EX()
|
| -
|
| - if (!msg_is_ok) {
|
| - // The message had a handler, but its de-serialization failed.
|
| - // Kill the renderer.
|
| - UserMetrics::RecordAction(UserMetricsAction("BadMessageTerminate_RVH"));
|
| - process()->ReceivedBadMessage();
|
| - }
|
| -
|
| - return handled;
|
| -}
|
| -
|
| -void RenderViewHost::Shutdown() {
|
| - // If we are being run modally (see RunModal), then we need to cleanup.
|
| - if (run_modal_reply_msg_) {
|
| - Send(run_modal_reply_msg_);
|
| - run_modal_reply_msg_ = NULL;
|
| - }
|
| -
|
| - DevToolsManager* devtools_manager = DevToolsManager::GetInstance();
|
| - if (devtools_manager) // NULL in tests
|
| - devtools_manager->UnregisterDevToolsClientHostFor(this);
|
| -
|
| - RenderWidgetHost::Shutdown();
|
| -}
|
| -
|
| -bool RenderViewHost::IsRenderView() const {
|
| - return true;
|
| -}
|
| -
|
| -void RenderViewHost::CreateNewWindow(
|
| - int route_id,
|
| - const ViewHostMsg_CreateWindow_Params& params) {
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - if (!view)
|
| - return;
|
| -
|
| - view->CreateNewWindow(route_id, params);
|
| -}
|
| -
|
| -void RenderViewHost::CreateNewWidget(int route_id,
|
| - WebKit::WebPopupType popup_type) {
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - if (view)
|
| - view->CreateNewWidget(route_id, popup_type);
|
| -}
|
| -
|
| -void RenderViewHost::CreateNewFullscreenWidget(int route_id) {
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - if (view)
|
| - view->CreateNewFullscreenWidget(route_id);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgShowView(int route_id,
|
| - WindowOpenDisposition disposition,
|
| - const gfx::Rect& initial_pos,
|
| - bool user_gesture) {
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - if (view) {
|
| - view->ShowCreatedWindow(route_id, disposition, initial_pos, user_gesture);
|
| - Send(new ViewMsg_Move_ACK(route_id));
|
| - }
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgShowWidget(int route_id,
|
| - const gfx::Rect& initial_pos) {
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - if (view) {
|
| - view->ShowCreatedWidget(route_id, initial_pos);
|
| - Send(new ViewMsg_Move_ACK(route_id));
|
| - }
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgShowFullscreenWidget(int route_id) {
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - if (view) {
|
| - view->ShowCreatedFullscreenWidget(route_id);
|
| - Send(new ViewMsg_Move_ACK(route_id));
|
| - }
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgRunModal(IPC::Message* reply_msg) {
|
| - DCHECK(!run_modal_reply_msg_);
|
| - run_modal_reply_msg_ = reply_msg;
|
| -
|
| - // TODO(darin): Bug 1107929: Need to inform our delegate to show this view in
|
| - // an app-modal fashion.
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgRenderViewReady() {
|
| - render_view_termination_status_ = base::TERMINATION_STATUS_STILL_RUNNING;
|
| - WasResized();
|
| - delegate_->RenderViewReady(this);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgRenderViewGone(int status, int exit_code) {
|
| - // Keep the termination status so we can get at it later when we
|
| - // need to know why it died.
|
| - render_view_termination_status_ =
|
| - static_cast<base::TerminationStatus>(status);
|
| -
|
| - // Our base class RenderWidgetHost needs to reset some stuff.
|
| - RendererExited(render_view_termination_status_, exit_code);
|
| -
|
| - delegate_->RenderViewGone(this,
|
| - static_cast<base::TerminationStatus>(status),
|
| - exit_code);
|
| -}
|
| -
|
| -// Called when the renderer navigates. For every frame loaded, we'll get this
|
| -// notification containing parameters identifying the navigation.
|
| -//
|
| -// Subframes are identified by the page transition type. For subframes loaded
|
| -// as part of a wider page load, the page_id will be the same as for the top
|
| -// level frame. If the user explicitly requests a subframe navigation, we will
|
| -// get a new page_id because we need to create a new navigation entry for that
|
| -// action.
|
| -void RenderViewHost::OnMsgNavigate(const IPC::Message& msg) {
|
| - // Read the parameters out of the IPC message directly to avoid making another
|
| - // copy when we filter the URLs.
|
| - void* iter = NULL;
|
| - ViewHostMsg_FrameNavigate_Params validated_params;
|
| - if (!IPC::ParamTraits<ViewHostMsg_FrameNavigate_Params>::
|
| - Read(&msg, &iter, &validated_params))
|
| - return;
|
| -
|
| - // If we're waiting for a beforeunload ack from this renderer and we receive
|
| - // a Navigate message from the main frame, then the renderer was navigating
|
| - // before it received the request. If it is during a cross-site navigation,
|
| - // then we should forget about the beforeunload, because the navigation will
|
| - // now be canceled. (If it is instead during an attempt to close the page,
|
| - // we should be sure to keep waiting for the ack, which the new page will
|
| - // send.)
|
| - //
|
| - // If we did not clear this state, an unresponsiveness timer might think we
|
| - // are waiting for an ack but are not in a cross-site navigation, and would
|
| - // close the tab. TODO(creis): That timer code should be refactored to only
|
| - // close the tab if we explicitly know the user tried to close the tab, and
|
| - // not just check for the absence of a cross-site navigation. Once that's
|
| - // fixed, this check can go away.
|
| - if (is_waiting_for_beforeunload_ack_ &&
|
| - unload_ack_is_for_cross_site_transition_ &&
|
| - PageTransition::IsMainFrame(validated_params.transition)) {
|
| - is_waiting_for_beforeunload_ack_ = false;
|
| - StopHangMonitorTimeout();
|
| - }
|
| -
|
| - // If we're waiting for an unload ack from this renderer and we receive a
|
| - // Navigate message, then the renderer was navigating before it received the
|
| - // unload request. It will either respond to the unload request soon or our
|
| - // timer will expire. Either way, we should ignore this message, because we
|
| - // have already committed to closing this renderer.
|
| - if (is_waiting_for_unload_ack_)
|
| - return;
|
| -
|
| - const int renderer_id = process()->id();
|
| - ChildProcessSecurityPolicy* policy =
|
| - ChildProcessSecurityPolicy::GetInstance();
|
| - // Without this check, an evil renderer can trick the browser into creating
|
| - // a navigation entry for a banned URL. If the user clicks the back button
|
| - // followed by the forward button (or clicks reload, or round-trips through
|
| - // session restore, etc), we'll think that the browser commanded the
|
| - // renderer to load the URL and grant the renderer the privileges to request
|
| - // the URL. To prevent this attack, we block the renderer from inserting
|
| - // banned URLs into the navigation controller in the first place.
|
| - FilterURL(policy, renderer_id, &validated_params.url);
|
| - FilterURL(policy, renderer_id, &validated_params.referrer);
|
| - for (std::vector<GURL>::iterator it(validated_params.redirects.begin());
|
| - it != validated_params.redirects.end(); ++it) {
|
| - FilterURL(policy, renderer_id, &(*it));
|
| - }
|
| - FilterURL(policy, renderer_id, &validated_params.searchable_form_url);
|
| - FilterURL(policy, renderer_id, &validated_params.password_form.origin);
|
| - FilterURL(policy, renderer_id, &validated_params.password_form.action);
|
| -
|
| - delegate_->DidNavigate(this, validated_params);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgUpdateState(int32 page_id,
|
| - const std::string& state) {
|
| - delegate_->UpdateState(this, page_id, state);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgUpdateTitle(int32 page_id,
|
| - const std::wstring& title) {
|
| - if (title.length() > chrome::kMaxTitleChars) {
|
| - NOTREACHED() << "Renderer sent too many characters in title.";
|
| - return;
|
| - }
|
| - delegate_->UpdateTitle(this, page_id, title);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgUpdateEncoding(const std::string& encoding_name) {
|
| - delegate_->UpdateEncoding(this, encoding_name);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgUpdateTargetURL(int32 page_id,
|
| - const GURL& url) {
|
| - delegate_->UpdateTargetURL(page_id, url);
|
| -
|
| - // Send a notification back to the renderer that we are ready to
|
| - // receive more target urls.
|
| - Send(new ViewMsg_UpdateTargetURL_ACK(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgThumbnail(const GURL& url,
|
| - const ThumbnailScore& score,
|
| - const SkBitmap& bitmap) {
|
| - delegate_->UpdateThumbnail(url, bitmap, score);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgScreenshot(const SkBitmap& bitmap) {
|
| - NotificationService::current()->Notify(
|
| - NotificationType::TAB_SNAPSHOT_TAKEN,
|
| - Source<RenderViewHost>(this),
|
| - Details<const SkBitmap>(&bitmap));
|
| -}
|
| -
|
| -void RenderViewHost::OnUpdateInspectorSetting(
|
| - const std::string& key, const std::string& value) {
|
| - delegate_->UpdateInspectorSetting(key, value);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgClose() {
|
| - // If the renderer is telling us to close, it has already run the unload
|
| - // events, and we can take the fast path.
|
| - ClosePageIgnoringUnloadEvents();
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgRequestMove(const gfx::Rect& pos) {
|
| - delegate_->RequestMove(pos);
|
| - Send(new ViewMsg_Move_ACK(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgDidStartLoading() {
|
| - delegate_->DidStartLoading();
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgDidStopLoading() {
|
| - delegate_->DidStopLoading();
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgDidChangeLoadProgress(double load_progress) {
|
| - delegate_->DidChangeLoadProgress(load_progress);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgDocumentAvailableInMainFrame() {
|
| - delegate_->DocumentAvailableInMainFrame(this);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgDocumentOnLoadCompletedInMainFrame(int32 page_id) {
|
| - delegate_->DocumentOnLoadCompletedInMainFrame(this, page_id);
|
| -}
|
| -
|
| -void RenderViewHost::OnExecuteCodeFinished(int request_id, bool success) {
|
| - std::pair<int, bool> result_details(request_id, success);
|
| - NotificationService::current()->Notify(
|
| - NotificationType::TAB_CODE_EXECUTED,
|
| - NotificationService::AllSources(),
|
| - Details<std::pair<int, bool> >(&result_details));
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgContextMenu(const ContextMenuParams& params) {
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - if (!view)
|
| - return;
|
| -
|
| - // Validate the URLs in |params|. If the renderer can't request the URLs
|
| - // directly, don't show them in the context menu.
|
| - ContextMenuParams validated_params(params);
|
| - int renderer_id = process()->id();
|
| - ChildProcessSecurityPolicy* policy =
|
| - ChildProcessSecurityPolicy::GetInstance();
|
| -
|
| - // We don't validate |unfiltered_link_url| so that this field can be used
|
| - // when users want to copy the original link URL.
|
| - FilterURL(policy, renderer_id, &validated_params.link_url);
|
| - FilterURL(policy, renderer_id, &validated_params.src_url);
|
| - FilterURL(policy, renderer_id, &validated_params.page_url);
|
| - FilterURL(policy, renderer_id, &validated_params.frame_url);
|
| -
|
| - view->ShowContextMenu(validated_params);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgOpenURL(const GURL& url,
|
| - const GURL& referrer,
|
| - WindowOpenDisposition disposition) {
|
| - GURL validated_url(url);
|
| - FilterURL(ChildProcessSecurityPolicy::GetInstance(),
|
| - process()->id(), &validated_url);
|
| -
|
| - delegate_->RequestOpenURL(validated_url, referrer, disposition);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgDidContentsPreferredSizeChange(
|
| - const gfx::Size& new_size) {
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - if (!view)
|
| - return;
|
| - view->UpdatePreferredSize(new_size);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgDomOperationResponse(
|
| - const std::string& json_string, int automation_id) {
|
| - delegate_->DomOperationResponse(json_string, automation_id);
|
| -
|
| - // We also fire a notification for more loosely-coupled use cases.
|
| - DomOperationNotificationDetails details(json_string, automation_id);
|
| - NotificationService::current()->Notify(
|
| - NotificationType::DOM_OPERATION_RESPONSE, Source<RenderViewHost>(this),
|
| - Details<DomOperationNotificationDetails>(&details));
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgWebUISend(
|
| - const GURL& source_url, const std::string& message,
|
| - const std::string& content) {
|
| - if (!ChildProcessSecurityPolicy::GetInstance()->
|
| - HasWebUIBindings(process()->id())) {
|
| - NOTREACHED() << "Blocked unauthorized use of WebUIBindings.";
|
| - return;
|
| - }
|
| -
|
| - scoped_ptr<Value> value;
|
| - if (!content.empty()) {
|
| - value.reset(base::JSONReader::Read(content, false));
|
| - if (!value.get() || !value->IsType(Value::TYPE_LIST)) {
|
| - // The page sent us something that we didn't understand.
|
| - // This probably indicates a programming error.
|
| - NOTREACHED() << "Invalid JSON argument in OnMsgWebUISend.";
|
| - return;
|
| - }
|
| - }
|
| -
|
| - ViewHostMsg_DomMessage_Params params;
|
| - params.name = message;
|
| - if (value.get())
|
| - params.arguments.Swap(static_cast<ListValue*>(value.get()));
|
| - params.source_url = source_url;
|
| - // WebUI doesn't use these values yet.
|
| - // TODO(aa): When WebUI is ported to ExtensionFunctionDispatcher, send real
|
| - // values here.
|
| - params.request_id = -1;
|
| - params.has_callback = false;
|
| - params.user_gesture = false;
|
| - delegate_->ProcessWebUIMessage(params);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgForwardMessageToExternalHost(
|
| - const std::string& message, const std::string& origin,
|
| - const std::string& target) {
|
| - delegate_->ProcessExternalHostMessage(message, origin, target);
|
| -}
|
| -
|
| -void RenderViewHost::DisassociateFromPopupCount() {
|
| - Send(new ViewMsg_DisassociateFromPopupCount(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::AllowScriptToClose(bool script_can_close) {
|
| - Send(new ViewMsg_AllowScriptToClose(routing_id(), script_can_close));
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgSetTooltipText(
|
| - const std::wstring& tooltip_text,
|
| - WebTextDirection text_direction_hint) {
|
| - // First, add directionality marks around tooltip text if necessary.
|
| - // A naive solution would be to simply always wrap the text. However, on
|
| - // windows, Unicode directional embedding characters can't be displayed on
|
| - // systems that lack RTL fonts and are instead displayed as empty squares.
|
| - //
|
| - // To get around this we only wrap the string when we deem it necessary i.e.
|
| - // when the locale direction is different than the tooltip direction hint.
|
| - //
|
| - // Currently, we use element's directionality as the tooltip direction hint.
|
| - // An alternate solution would be to set the overall directionality based on
|
| - // trying to detect the directionality from the tooltip text rather than the
|
| - // element direction. One could argue that would be a preferable solution
|
| - // but we use the current approach to match Fx & IE's behavior.
|
| - std::wstring wrapped_tooltip_text = tooltip_text;
|
| - if (!tooltip_text.empty()) {
|
| - if (text_direction_hint == WebKit::WebTextDirectionLeftToRight) {
|
| - // Force the tooltip to have LTR directionality.
|
| - wrapped_tooltip_text = UTF16ToWide(
|
| - base::i18n::GetDisplayStringInLTRDirectionality(
|
| - WideToUTF16(wrapped_tooltip_text)));
|
| - } else if (text_direction_hint == WebKit::WebTextDirectionRightToLeft &&
|
| - !base::i18n::IsRTL()) {
|
| - // Force the tooltip to have RTL directionality.
|
| - base::i18n::WrapStringWithRTLFormatting(&wrapped_tooltip_text);
|
| - }
|
| - }
|
| - if (view())
|
| - view()->SetTooltipText(wrapped_tooltip_text);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgSelectionChanged(const std::string& text) {
|
| - if (view())
|
| - view()->SelectionChanged(text);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgRunJavaScriptMessage(
|
| - const std::wstring& message,
|
| - const std::wstring& default_prompt,
|
| - const GURL& frame_url,
|
| - const int flags,
|
| - IPC::Message* reply_msg) {
|
| - // While a JS message dialog is showing, tabs in the same process shouldn't
|
| - // process input events.
|
| - process()->set_ignore_input_events(true);
|
| - StopHangMonitorTimeout();
|
| - delegate_->RunJavaScriptMessage(message, default_prompt, frame_url, flags,
|
| - reply_msg,
|
| - &are_javascript_messages_suppressed_);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgRunBeforeUnloadConfirm(const GURL& frame_url,
|
| - const std::wstring& message,
|
| - IPC::Message* reply_msg) {
|
| - // While a JS before unload dialog is showing, tabs in the same process
|
| - // shouldn't process input events.
|
| - process()->set_ignore_input_events(true);
|
| - StopHangMonitorTimeout();
|
| - delegate_->RunBeforeUnloadConfirm(message, reply_msg);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgShowModalHTMLDialog(
|
| - const GURL& url, int width, int height, const std::string& json_arguments,
|
| - IPC::Message* reply_msg) {
|
| - StopHangMonitorTimeout();
|
| - delegate_->ShowModalHTMLDialog(url, width, height, json_arguments, reply_msg);
|
| -}
|
| -
|
| -void RenderViewHost::MediaPlayerActionAt(const gfx::Point& location,
|
| - const WebMediaPlayerAction& action) {
|
| - // TODO(ajwong): Which thread should run this? Does it matter?
|
| - Send(new ViewMsg_MediaPlayerActionAt(routing_id(), location, action));
|
| -}
|
| -
|
| -void RenderViewHost::ContextMenuClosed(
|
| - const webkit_glue::CustomContextMenuContext& custom_context) {
|
| - Send(new ViewMsg_ContextMenuClosed(routing_id(), custom_context));
|
| -}
|
| -
|
| -void RenderViewHost::PrintNodeUnderContextMenu() {
|
| - Send(new ViewMsg_PrintNodeUnderContextMenu(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::PrintForPrintPreview() {
|
| - Send(new ViewMsg_PrintForPrintPreview(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgStartDragging(
|
| - const WebDropData& drop_data,
|
| - WebDragOperationsMask drag_operations_mask,
|
| - const SkBitmap& image,
|
| - const gfx::Point& image_offset) {
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - if (view)
|
| - view->StartDragging(drop_data, drag_operations_mask, image, image_offset);
|
| -}
|
| -
|
| -void RenderViewHost::OnUpdateDragCursor(WebDragOperation current_op) {
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - if (view)
|
| - view->UpdateDragCursor(current_op);
|
| -}
|
| -
|
| -void RenderViewHost::OnTakeFocus(bool reverse) {
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - if (view)
|
| - view->TakeFocus(reverse);
|
| -}
|
| -
|
| -void RenderViewHost::OnAddMessageToConsole(const std::wstring& message,
|
| - int32 line_no,
|
| - const std::wstring& source_id) {
|
| - std::wstring msg = StringPrintf(L"\"%ls,\" source: %ls (%d)", message.c_str(),
|
| - source_id.c_str(), line_no);
|
| - logging::LogMessage("CONSOLE", 0).stream() << msg;
|
| -}
|
| -
|
| -void RenderViewHost::OnForwardToDevToolsAgent(const IPC::Message& message) {
|
| - DevToolsManager::GetInstance()->ForwardToDevToolsAgent(this, message);
|
| -}
|
| -
|
| -void RenderViewHost::OnForwardToDevToolsClient(const IPC::Message& message) {
|
| - DevToolsManager::GetInstance()->ForwardToDevToolsClient(this, message);
|
| -}
|
| -
|
| -void RenderViewHost::OnActivateDevToolsWindow() {
|
| - DevToolsManager::GetInstance()->ActivateWindow(this);
|
| -}
|
| -
|
| -void RenderViewHost::OnCloseDevToolsWindow() {
|
| - DevToolsManager::GetInstance()->CloseWindow(this);
|
| -}
|
| -
|
| -void RenderViewHost::OnRequestDockDevToolsWindow() {
|
| - DevToolsManager::GetInstance()->RequestDockWindow(this);
|
| -}
|
| -
|
| -void RenderViewHost::OnRequestUndockDevToolsWindow() {
|
| - DevToolsManager::GetInstance()->RequestUndockWindow(this);
|
| -}
|
| -
|
| -void RenderViewHost::OnDevToolsRuntimePropertyChanged(
|
| - const std::string& name,
|
| - const std::string& value) {
|
| - DevToolsManager::GetInstance()->
|
| - RuntimePropertyChanged(this, name, value);
|
| -}
|
| -
|
| -bool RenderViewHost::PreHandleKeyboardEvent(
|
| - const NativeWebKeyboardEvent& event, bool* is_keyboard_shortcut) {
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - return view && view->PreHandleKeyboardEvent(event, is_keyboard_shortcut);
|
| -}
|
| -
|
| -void RenderViewHost::UnhandledKeyboardEvent(
|
| - const NativeWebKeyboardEvent& event) {
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - if (view)
|
| - view->HandleKeyboardEvent(event);
|
| -}
|
| -
|
| -void RenderViewHost::OnUserGesture() {
|
| - delegate_->OnUserGesture();
|
| -}
|
| -
|
| -void RenderViewHost::GetMalwareDOMDetails() {
|
| - Send(new ViewMsg_GetMalwareDOMDetails(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::GetAllSavableResourceLinksForCurrentPage(
|
| - const GURL& page_url) {
|
| - Send(new ViewMsg_GetAllSavableResourceLinksForCurrentPage(routing_id(),
|
| - page_url));
|
| -}
|
| -
|
| -void RenderViewHost::GetSerializedHtmlDataForCurrentPageWithLocalLinks(
|
| - const std::vector<GURL>& links,
|
| - const std::vector<FilePath>& local_paths,
|
| - const FilePath& local_directory_name) {
|
| - Send(new ViewMsg_GetSerializedHtmlDataForCurrentPageWithLocalLinks(
|
| - routing_id(), links, local_paths, local_directory_name));
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgShouldCloseACK(bool proceed) {
|
| - StopHangMonitorTimeout();
|
| - // If this renderer navigated while the beforeunload request was in flight, we
|
| - // may have cleared this state in OnMsgNavigate, in which case we can ignore
|
| - // this message.
|
| - if (!is_waiting_for_beforeunload_ack_)
|
| - return;
|
| -
|
| - is_waiting_for_beforeunload_ack_ = false;
|
| -
|
| - RenderViewHostDelegate::RendererManagement* management_delegate =
|
| - delegate_->GetRendererManagementDelegate();
|
| - if (management_delegate) {
|
| - management_delegate->ShouldClosePage(
|
| - unload_ack_is_for_cross_site_transition_, proceed);
|
| - }
|
| -}
|
| -
|
| -void RenderViewHost::WindowMoveOrResizeStarted() {
|
| - Send(new ViewMsg_MoveOrResizeStarted(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::NotifyRendererUnresponsive() {
|
| - delegate_->RendererUnresponsive(
|
| - this, is_waiting_for_beforeunload_ack_ || is_waiting_for_unload_ack_);
|
| -}
|
| -
|
| -void RenderViewHost::NotifyRendererResponsive() {
|
| - delegate_->RendererResponsive(this);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgFocusedNodeChanged(bool is_editable_node) {
|
| - delegate_->FocusedNodeChanged(is_editable_node);
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgFocus() {
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - if (view)
|
| - view->Activate();
|
| -}
|
| -
|
| -void RenderViewHost::OnMsgBlur() {
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - if (view)
|
| - view->Deactivate();
|
| -}
|
| -
|
| -void RenderViewHost::ForwardMouseEvent(
|
| - const WebKit::WebMouseEvent& mouse_event) {
|
| -
|
| - // We make a copy of the mouse event because
|
| - // RenderWidgetHost::ForwardMouseEvent will delete |mouse_event|.
|
| - WebKit::WebMouseEvent event_copy(mouse_event);
|
| - RenderWidgetHost::ForwardMouseEvent(event_copy);
|
| -
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - if (view) {
|
| - switch (event_copy.type) {
|
| - case WebInputEvent::MouseMove:
|
| - view->HandleMouseMove();
|
| - break;
|
| - case WebInputEvent::MouseLeave:
|
| - view->HandleMouseLeave();
|
| - break;
|
| - case WebInputEvent::MouseDown:
|
| - view->HandleMouseDown();
|
| - break;
|
| - case WebInputEvent::MouseWheel:
|
| - if (ignore_input_events() && delegate_)
|
| - delegate_->OnIgnoredUIEvent();
|
| - break;
|
| - case WebInputEvent::MouseUp:
|
| - view->HandleMouseUp();
|
| - default:
|
| - // For now, we don't care about the rest.
|
| - break;
|
| - }
|
| - }
|
| -}
|
| -
|
| -void RenderViewHost::OnMouseActivate() {
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - if (view)
|
| - view->HandleMouseActivate();
|
| -}
|
| -
|
| -void RenderViewHost::ForwardKeyboardEvent(
|
| - const NativeWebKeyboardEvent& key_event) {
|
| - if (ignore_input_events()) {
|
| - if (key_event.type == WebInputEvent::RawKeyDown && delegate_)
|
| - delegate_->OnIgnoredUIEvent();
|
| - return;
|
| - }
|
| - RenderWidgetHost::ForwardKeyboardEvent(key_event);
|
| -}
|
| -
|
| -void RenderViewHost::ForwardEditCommand(const std::string& name,
|
| - const std::string& value) {
|
| - IPC::Message* message = new ViewMsg_ExecuteEditCommand(routing_id(),
|
| - name,
|
| - value);
|
| - Send(message);
|
| -}
|
| -
|
| -void RenderViewHost::ForwardEditCommandsForNextKeyEvent(
|
| - const EditCommands& edit_commands) {
|
| - IPC::Message* message = new ViewMsg_SetEditCommandsForNextKeyEvent(
|
| - routing_id(), edit_commands);
|
| - Send(message);
|
| -}
|
| -
|
| -void RenderViewHost::ForwardMessageFromExternalHost(const std::string& message,
|
| - const std::string& origin,
|
| - const std::string& target) {
|
| - Send(new ViewMsg_HandleMessageFromExternalHost(routing_id(), message, origin,
|
| - target));
|
| -}
|
| -
|
| -void RenderViewHost::OnExtensionRequest(
|
| - const ViewHostMsg_DomMessage_Params& params) {
|
| - if (!ChildProcessSecurityPolicy::GetInstance()->
|
| - HasExtensionBindings(process()->id())) {
|
| - // This can happen if someone uses window.open() to open an extension URL
|
| - // from a non-extension context.
|
| - BlockExtensionRequest(params.request_id);
|
| - return;
|
| - }
|
| -
|
| - delegate_->ProcessWebUIMessage(params);
|
| -}
|
| -
|
| -void RenderViewHost::SendExtensionResponse(int request_id, bool success,
|
| - const std::string& response,
|
| - const std::string& error) {
|
| - Send(new ViewMsg_ExtensionResponse(routing_id(), request_id, success,
|
| - response, error));
|
| -}
|
| -
|
| -void RenderViewHost::BlockExtensionRequest(int request_id) {
|
| - SendExtensionResponse(request_id, false, "",
|
| - "Access to extension API denied.");
|
| -}
|
| -
|
| -void RenderViewHost::UpdateBrowserWindowId(int window_id) {
|
| - Send(new ViewMsg_UpdateBrowserWindowId(routing_id(), window_id));
|
| -}
|
| -
|
| -void RenderViewHost::PerformCustomContextMenuAction(
|
| - const webkit_glue::CustomContextMenuContext& custom_context,
|
| - unsigned action) {
|
| - Send(new ViewMsg_CustomContextMenuAction(routing_id(),
|
| - custom_context,
|
| - action));
|
| -}
|
| -
|
| -void RenderViewHost::SendContentSettings(const GURL& url,
|
| - const ContentSettings& settings) {
|
| - Send(new ViewMsg_SetContentSettingsForCurrentURL(url, settings));
|
| -}
|
| -
|
| -void RenderViewHost::EnablePreferredSizeChangedMode(int flags) {
|
| - Send(new ViewMsg_EnablePreferredSizeChangedMode(routing_id(), flags));
|
| -}
|
| -
|
| -#if defined(OS_MACOSX)
|
| -void RenderViewHost::DidSelectPopupMenuItem(int selected_index) {
|
| - Send(new ViewMsg_SelectPopupMenuItem(routing_id(), selected_index));
|
| -}
|
| -
|
| -void RenderViewHost::DidCancelPopupMenu() {
|
| - Send(new ViewMsg_SelectPopupMenuItem(routing_id(), -1));
|
| -}
|
| -#endif
|
| -
|
| -void RenderViewHost::SearchBoxChange(const string16& value,
|
| - bool verbatim,
|
| - int selection_start,
|
| - int selection_end) {
|
| - Send(new ViewMsg_SearchBoxChange(
|
| - routing_id(), value, verbatim, selection_start, selection_end));
|
| -}
|
| -
|
| -void RenderViewHost::SearchBoxSubmit(const string16& value,
|
| - bool verbatim) {
|
| - Send(new ViewMsg_SearchBoxSubmit(routing_id(), value, verbatim));
|
| -}
|
| -
|
| -void RenderViewHost::SearchBoxCancel() {
|
| - Send(new ViewMsg_SearchBoxCancel(routing_id()));
|
| -}
|
| -
|
| -void RenderViewHost::SearchBoxResize(const gfx::Rect& search_box_bounds) {
|
| - Send(new ViewMsg_SearchBoxResize(routing_id(), search_box_bounds));
|
| -}
|
| -
|
| -void RenderViewHost::DetermineIfPageSupportsInstant(const string16& value,
|
| - bool verbatim,
|
| - int selection_start,
|
| - int selection_end) {
|
| - Send(new ViewMsg_DetermineIfPageSupportsInstant(
|
| - routing_id(), value, verbatim, selection_start, selection_end));
|
| -}
|
| -
|
| -void RenderViewHost::FilterURL(ChildProcessSecurityPolicy* policy,
|
| - int renderer_id,
|
| - GURL* url) {
|
| - if (!url->is_valid())
|
| - return; // We don't need to block invalid URLs.
|
| -
|
| - if (url->SchemeIs(chrome::kAboutScheme)) {
|
| - // The renderer treats all URLs in the about: scheme as being about:blank.
|
| - // Canonicalize about: URLs to about:blank.
|
| - *url = GURL(chrome::kAboutBlankURL);
|
| - }
|
| -
|
| - if (!policy->CanRequestURL(renderer_id, *url)) {
|
| - // If this renderer is not permitted to request this URL, we invalidate the
|
| - // URL. This prevents us from storing the blocked URL and becoming confused
|
| - // later.
|
| - VLOG(1) << "Blocked URL " << url->spec();
|
| - *url = GURL();
|
| - }
|
| -}
|
| -
|
| -void RenderViewHost::JavaScriptStressTestControl(int cmd, int param) {
|
| - Send(new ViewMsg_JavaScriptStressTestControl(routing_id(), cmd, param));
|
| -}
|
| -
|
| -void RenderViewHost::OnExtensionPostMessage(
|
| - int port_id, const std::string& message) {
|
| - if (process()->profile()->GetExtensionMessageService()) {
|
| - process()->profile()->GetExtensionMessageService()->
|
| - PostMessageFromRenderer(port_id, message);
|
| - }
|
| -}
|
| -
|
| -void RenderViewHost::OnAccessibilityNotifications(
|
| - const std::vector<ViewHostMsg_AccessibilityNotification_Params>& params) {
|
| - if (view())
|
| - view()->OnAccessibilityNotifications(params);
|
| -
|
| - if (params.size() > 0) {
|
| - for (unsigned i = 0; i < params.size(); i++) {
|
| - const ViewHostMsg_AccessibilityNotification_Params& param = params[i];
|
| -
|
| - if (param.notification_type ==
|
| - ViewHostMsg_AccessibilityNotification_Params::
|
| - NOTIFICATION_TYPE_LOAD_COMPLETE) {
|
| - // TODO(ctguil): Remove when mac processes OnAccessibilityNotifications.
|
| - if (view())
|
| - view()->UpdateAccessibilityTree(param.acc_obj);
|
| -
|
| - if (save_accessibility_tree_for_testing_)
|
| - accessibility_tree_ = param.acc_obj;
|
| - }
|
| - }
|
| -
|
| - NotificationService::current()->Notify(
|
| - NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED,
|
| - Source<RenderViewHost>(this),
|
| - NotificationService::NoDetails());
|
| - }
|
| -
|
| - AccessibilityNotificationsAck();
|
| -}
|
| -
|
| -void RenderViewHost::OnCSSInserted() {
|
| - delegate_->DidInsertCSS();
|
| -}
|
| -
|
| -void RenderViewHost::OnContentBlocked(ContentSettingsType type,
|
| - const std::string& resource_identifier) {
|
| - RenderViewHostDelegate::ContentSettings* content_settings_delegate =
|
| - delegate_->GetContentSettingsDelegate();
|
| - if (content_settings_delegate)
|
| - content_settings_delegate->OnContentBlocked(type, resource_identifier);
|
| -}
|
| -
|
| -void RenderViewHost::OnAppCacheAccessed(const GURL& manifest_url,
|
| - bool blocked_by_policy) {
|
| - RenderViewHostDelegate::ContentSettings* content_settings_delegate =
|
| - delegate_->GetContentSettingsDelegate();
|
| - if (content_settings_delegate)
|
| - content_settings_delegate->OnAppCacheAccessed(manifest_url,
|
| - blocked_by_policy);
|
| -}
|
| -
|
| -void RenderViewHost::OnWebDatabaseAccessed(const GURL& url,
|
| - const string16& name,
|
| - const string16& display_name,
|
| - unsigned long estimated_size,
|
| - bool blocked_by_policy) {
|
| - RenderViewHostDelegate::ContentSettings* content_settings_delegate =
|
| - delegate_->GetContentSettingsDelegate();
|
| - if (content_settings_delegate)
|
| - content_settings_delegate->OnWebDatabaseAccessed(
|
| - url, name, display_name, estimated_size, blocked_by_policy);
|
| -}
|
| -
|
| -void RenderViewHost::OnUpdateZoomLimits(int minimum_percent,
|
| - int maximum_percent,
|
| - bool remember) {
|
| - delegate_->UpdateZoomLimits(minimum_percent, maximum_percent, remember);
|
| -}
|
| -
|
| -void RenderViewHost::OnScriptEvalResponse(int id, const ListValue& result) {
|
| - Value* result_value;
|
| - result.Get(0, &result_value);
|
| - std::pair<int, Value*> details(id, result_value);
|
| - NotificationService::current()->Notify(
|
| - NotificationType::EXECUTE_JAVASCRIPT_RESULT,
|
| - Source<RenderViewHost>(this),
|
| - Details<std::pair<int, Value*> >(&details));
|
| -}
|
| -
|
| -#if defined(OS_MACOSX)
|
| -void RenderViewHost::OnMsgShowPopup(
|
| - const ViewHostMsg_ShowPopup_Params& params) {
|
| - RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
|
| - if (view) {
|
| - view->ShowPopupMenu(params.bounds,
|
| - params.item_height,
|
| - params.item_font_size,
|
| - params.selected_item,
|
| - params.popup_items,
|
| - params.right_aligned);
|
| - }
|
| -}
|
| -#endif
|
| -
|
| -void RenderViewHost::OnCommandStateChanged(int command,
|
| - bool is_enabled,
|
| - int checked_state) {
|
| - if (command != RENDER_VIEW_COMMAND_TOGGLE_SPELL_CHECK) {
|
| - LOG(DFATAL) << "Unknown command " << command;
|
| - return;
|
| - }
|
| -
|
| - if (checked_state != RENDER_VIEW_COMMAND_CHECKED_STATE_UNCHECKED &&
|
| - checked_state != RENDER_VIEW_COMMAND_CHECKED_STATE_CHECKED &&
|
| - checked_state != RENDER_VIEW_COMMAND_CHECKED_STATE_MIXED) {
|
| - LOG(DFATAL) << "Invalid checked state " << checked_state;
|
| - return;
|
| - }
|
| -
|
| - CommandState state;
|
| - state.is_enabled = is_enabled;
|
| - state.checked_state =
|
| - static_cast<RenderViewCommandCheckedState>(checked_state);
|
| - command_states_[static_cast<RenderViewCommand>(command)] = state;
|
| -}
|
|
|