#include "content/common/drag_event_source_info.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/render_view_host.h"
-#include "content/public/common/javascript_message_type.h"
#include "content/public/common/window_container_type.h"
#include "net/base/load_states.h"
#include "third_party/WebKit/public/web/WebAXEnums.h"
#include "third_party/WebKit/public/web/WebConsoleMessage.h"
#include "third_party/WebKit/public/web/WebPopupType.h"
-#include "third_party/WebKit/public/web/WebTextDirection.h"
#include "third_party/skia/include/core/SkColor.h"
-#include "ui/accessibility/ax_node_data.h"
#include "ui/base/window_open_disposition.h"
class SkBitmap;
class FrameMsg_Navigate;
-struct AccessibilityHostMsg_EventParams;
-struct AccessibilityHostMsg_LocationChangeParams;
+struct FrameMsg_Navigate_Params;
struct MediaPlayerAction;
struct ViewHostMsg_CreateWindow_Params;
-struct ViewHostMsg_ShowPopup_Params;
-struct FrameMsg_Navigate_Params;
struct ViewMsg_PostMessage_Params;
+#if defined(OS_TIZEN) && defined(ENABLE_MURPHY)
+namespace tizen {
+class MediaWebContentsObserver;
+}
+#endif
+
namespace base {
class ListValue;
}
namespace content {
-class BrowserMediaPlayerManager;
+class MediaWebContentsObserver;
class ChildProcessSecurityPolicyImpl;
class PageState;
class RenderWidgetHostDelegate;
class TestRenderViewHost;
class TimeoutMonitor;
struct FileChooserParams;
-struct ShowDesktopNotificationHostMsgParams;
#if defined(COMPILER_MSVC)
// RenderViewHostImpl is the bottom of a diamond-shaped hierarchy,
// The standard state for a RVH handling the communication with a
// RenderView.
STATE_DEFAULT = 0,
- // The RVH has sent the SwapOut request to the renderer, but has not
- // received the SwapOutACK yet. The new page has not been committed yet
- // either.
- STATE_WAITING_FOR_UNLOAD_ACK,
- // The RVH received the SwapOutACK from the RenderView, but the new page has
- // not been committed yet.
- STATE_WAITING_FOR_COMMIT,
// The RVH is waiting for the CloseACK from the RenderView.
STATE_WAITING_FOR_CLOSE,
// The RVH has not received the SwapOutACK yet, but the new page has
virtual RenderFrameHost* GetMainFrame() OVERRIDE;
virtual void AllowBindings(int binding_flags) OVERRIDE;
virtual void ClearFocusedElement() OVERRIDE;
+ virtual bool IsFocusedElementEditable() OVERRIDE;
virtual void ClosePage() OVERRIDE;
virtual void CopyImageAt(int x, int y) OVERRIDE;
- virtual void DesktopNotificationPermissionRequestDone(
- int callback_context) OVERRIDE;
- virtual void DesktopNotificationPostDisplay(int callback_context) OVERRIDE;
- virtual void DesktopNotificationPostError(
- int notification_id,
- const base::string16& message) OVERRIDE;
- virtual void DesktopNotificationPostClose(int notification_id,
- bool by_user) OVERRIDE;
- virtual void DesktopNotificationPostClick(int notification_id) OVERRIDE;
+ virtual void SaveImageAt(int x, int y) OVERRIDE;
virtual void DirectoryEnumerationFinished(
int request_id,
const std::vector<base::FilePath>& files) OVERRIDE;
virtual void DragSourceEndedAt(
int client_x, int client_y, int screen_x, int screen_y,
blink::WebDragOperation operation) OVERRIDE;
- virtual void DragSourceMovedTo(
- int client_x, int client_y, int screen_x, int screen_y) OVERRIDE;
virtual void DragSourceSystemDragEnded() OVERRIDE;
virtual void DragTargetDragEnter(
const DropData& drop_data,
virtual void ExecuteMediaPlayerActionAtLocation(
const gfx::Point& location,
const blink::WebMediaPlayerAction& action) OVERRIDE;
- virtual void ExecuteJavascriptInWebFrame(
- const base::string16& frame_xpath,
- const base::string16& jscript) OVERRIDE;
- virtual void ExecuteJavascriptInWebFrameCallbackResult(
- const base::string16& frame_xpath,
- const base::string16& jscript,
- const JavascriptResultCallback& callback) OVERRIDE;
virtual void ExecutePluginActionAtLocation(
const gfx::Point& location,
const blink::WebPluginAction& action) OVERRIDE;
virtual SiteInstance* GetSiteInstance() const OVERRIDE;
virtual bool IsRenderViewLive() const OVERRIDE;
virtual void NotifyMoveOrResizeStarted() OVERRIDE;
- virtual void ReloadFrame() OVERRIDE;
virtual void SetWebUIProperty(const std::string& name,
const std::string& value) OVERRIDE;
virtual void Zoom(PageZoom zoom) OVERRIDE;
virtual void SyncRendererPrefs() OVERRIDE;
- virtual void ToggleSpeechInput() OVERRIDE;
virtual WebPreferences GetWebkitPreferences() OVERRIDE;
virtual void UpdateWebkitPreferences(
const WebPreferences& prefs) OVERRIDE;
+ virtual void OnWebkitPreferencesChanged() OVERRIDE;
virtual void GetAudioOutputControllers(
const GetAudioOutputControllersCallback& callback) const OVERRIDE;
+ virtual void SelectWordAroundCaret() OVERRIDE;
#if defined(OS_ANDROID)
virtual void ActivateNearestFindResult(int request_id,
float x,
float y) OVERRIDE;
virtual void RequestFindMatchRects(int current_version) OVERRIDE;
- virtual void DisableFullscreenEncryptedMediaPlayback() OVERRIDE;
-#endif
-
-#if defined(USE_MOJO)
- virtual void SetWebUIHandle(mojo::ScopedMessagePipeHandle handle) OVERRIDE;
#endif
void set_delegate(RenderViewHostDelegate* d) {
// The |opener_route_id| parameter indicates which RenderView created this
// (MSG_ROUTING_NONE if none). If |max_page_id| is larger than -1, the
// RenderView is told to start issuing page IDs at |max_page_id| + 1.
+ // |window_was_created_with_opener| is true if this top-level frame was
+ // created with an opener. (The opener may have been closed since.)
+ // The |proxy_route_id| is only used when creating a RenderView in swapped out
+ // state.
virtual bool CreateRenderView(const base::string16& frame_name,
int opener_route_id,
- int32 max_page_id);
+ int proxy_route_id,
+ int32 max_page_id,
+ bool window_was_created_with_opener);
base::TerminationStatus render_view_termination_status() const {
return render_view_termination_status_;
}
// Returns the content specific prefs for this RenderViewHost.
- WebPreferences GetWebkitPrefs(const GURL& url);
-
- // Sends the given navigation message. Use this rather than sending it
- // yourself since this does the internal bookkeeping described below. This
- // function takes ownership of the provided message pointer.
- //
- // If a cross-site request is in progress, we may be suspended while waiting
- // for the onbeforeunload handler, so this function might buffer the message
- // rather than sending it.
- // TODO(nasko): Remove this method once all callers are converted to use
- // RenderFrameHostImpl.
- void Navigate(const FrameMsg_Navigate_Params& message);
-
- // Load the specified URL, this is a shortcut for Navigate().
- // TODO(nasko): Remove this method once all callers are converted to use
- // RenderFrameHostImpl.
- void NavigateToURL(const GURL& url);
-
- // Returns whether navigation messages are currently suspended for this
- // RenderViewHost. Only true during a cross-site navigation, while waiting
- // for the onbeforeunload handler.
- bool are_navigations_suspended() const { return navigations_suspended_; }
-
- // Suspends (or unsuspends) any navigation messages from being sent from this
- // RenderViewHost. This is called when a pending RenderViewHost is created
- // for a cross-site navigation, because we must suspend any navigations until
- // we hear back from the old renderer's onbeforeunload handler. Note that it
- // is important that only one navigation event happen after calling this
- // method with |suspend| equal to true. If |suspend| is false and there is
- // a suspended_nav_message_, this will send the message. This function
- // should only be called to toggle the state; callers should check
- // are_navigations_suspended() first. If |suspend| is false, the time that the
- // user decided the navigation should proceed should be passed as
- // |proceed_time|.
- void SetNavigationsSuspended(bool suspend,
- const base::TimeTicks& proceed_time);
-
- // Clears any suspended navigation state after a cross-site navigation is
- // canceled or suspended. This is important if we later return to this
- // RenderViewHost.
- void CancelSuspendedNavigations();
-
- // Whether the initial empty page of this view has been accessed by another
- // page, making it unsafe to show the pending URL. Always false after the
- // first commit.
- bool has_accessed_initial_document() {
- return has_accessed_initial_document_;
- }
+ WebPreferences ComputeWebkitPrefs(const GURL& url);
// Whether this RenderViewHost has been swapped out to be displayed by a
// different process.
// out.
void OnSwappedOut(bool timed_out);
- // Called when the RenderFrameHostManager has swapped in a new
- // RenderFrameHost. Should |this| RVH switch to the pending shutdown state,
- // |pending_delete_on_swap_out| will be executed upon reception of the
- // SwapOutACK, or when the unload timer times out.
- void WasSwappedOut(const base::Closure& pending_delete_on_swap_out);
-
// Set |this| as pending shutdown. |on_swap_out| will be called
// when the SwapOutACK is received, or when the unload timer times out.
void SetPendingShutdown(const base::Closure& on_swap_out);
// and the user has agreed to continue with closing the page.
void ClosePageIgnoringUnloadEvents();
- // Returns whether this RenderViewHost has an outstanding cross-site request.
- // Cleared when we hear the response and start to swap out the old
- // RenderViewHost, or if we hear a commit here without a network request.
- bool HasPendingCrossSiteRequest();
-
- // Sets whether this RenderViewHost has an outstanding cross-site request,
- // for which another renderer will need to run an onunload event handler.
- // This is called before the first navigation event for this RenderViewHost,
- // and cleared when we hear the response or commit.
- void SetHasPendingCrossSiteRequest(bool has_pending_request);
-
- // Notifies the RenderView that the JavaScript message that was shown was
- // closed by the user.
- void JavaScriptDialogClosed(IPC::Message* reply_msg,
- bool success,
- const base::string16& user_input);
-
// Tells the renderer view to focus the first (last if reverse is true) node.
void SetInitialFocus(bool reverse);
// RenderWidgetHost public overrides.
virtual void Init() OVERRIDE;
virtual void Shutdown() OVERRIDE;
+ virtual void WasHidden() OVERRIDE;
+ virtual void WasShown(const ui::LatencyInfo& latency_info) OVERRIDE;
virtual bool IsRenderView() const OVERRIDE;
virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
virtual void GotFocus() OVERRIDE;
virtual void LostCapture() OVERRIDE;
virtual void LostMouseLock() OVERRIDE;
+ virtual void SetIsLoading(bool is_loading) OVERRIDE;
virtual void ForwardMouseEvent(
const blink::WebMouseEvent& mouse_event) OVERRIDE;
virtual void OnPointerEventActivate() OVERRIDE;
// Creates a full screen RenderWidget.
void CreateNewFullscreenWidget(int route_id);
-#if defined(OS_MACOSX)
- // Select popup menu related methods (for external popup menus).
- void DidSelectPopupMenuItem(int selected_index);
- void DidCancelPopupMenu();
-#endif
-
-#if defined(OS_ANDROID)
- BrowserMediaPlayerManager* media_player_manager() {
- return media_player_manager_.get();
+#if defined(ENABLE_BROWSER_CDMS)
+ MediaWebContentsObserver* media_web_contents_observer() {
+ return media_web_contents_observer_.get();
}
-
- void DidSelectPopupMenuItems(const std::vector<int>& selected_indices);
- void DidCancelPopupMenu();
#endif
- // User rotated the screen. Calls the "onorientationchange" Javascript hook.
- void SendOrientationChangeEvent(int orientation);
-
int main_frame_routing_id() const {
return main_frame_routing_id_;
}
- // Set the opener to null in the renderer process.
- void DisownOpener();
-
- // Turn on accessibility testing. The given callback will be run
- // every time an accessibility notification is received from the
- // renderer process, and the accessibility tree it sent can be
- // retrieved using accessibility_tree_for_testing().
- void SetAccessibilityCallbackForTesting(
- const base::Callback<void(ui::AXEvent)>& callback);
-
- // Only valid if SetAccessibilityCallbackForTesting was called and
- // the callback was run at least once. Returns a snapshot of the
- // accessibility tree received from the renderer as of the last time
- // an accessibility notification was received.
- const ui::AXTree& ax_tree_for_testing() {
- CHECK(ax_tree_.get());
- return *ax_tree_.get();
- }
-
- // Set accessibility callbacks.
- void SetAccessibilityLayoutCompleteCallbackForTesting(
- const base::Closure& callback);
- void SetAccessibilityLoadCompleteCallbackForTesting(
- const base::Closure& callback);
- void SetAccessibilityOtherCallbackForTesting(
- const base::Closure& callback);
-
bool is_waiting_for_beforeunload_ack() {
return is_waiting_for_beforeunload_ack_;
}
// Whether the RVH is waiting for the unload ack from the renderer.
bool IsWaitingForUnloadACK() const;
+ void OnTextSurroundingSelectionResponse(const base::string16& content,
+ size_t start_offset,
+ size_t end_offset);
+
// Update the FrameTree to use this RenderViewHost's main frame
// RenderFrameHost. Called when the RenderViewHost is committed.
//
void OnRenderViewReady();
void OnRenderProcessGone(int status, int error_code);
void OnUpdateState(int32 page_id, const PageState& state);
- void OnUpdateTitle(int32 page_id,
- const base::string16& title,
- blink::WebTextDirection title_direction);
- void OnUpdateEncoding(const std::string& encoding);
- void OnUpdateTargetURL(int32 page_id, const GURL& url);
+ void OnUpdateTargetURL(const GURL& url);
void OnClose();
void OnRequestMove(const gfx::Rect& pos);
- void OnDidChangeLoadProgress(double load_progress);
- void OnDidDisownOpener();
- void OnDocumentAvailableInMainFrame();
- void OnDocumentOnLoadCompletedInMainFrame(int32 page_id);
+ void OnDocumentAvailableInMainFrame(bool uses_temporary_zoom_level);
void OnToggleFullscreen(bool enter_fullscreen);
void OnDidContentsPreferredSizeChange(const gfx::Size& new_size);
- void OnDidChangeScrollOffset();
- void OnDidChangeScrollbarsForMainFrame(bool has_horizontal_scrollbar,
- bool has_vertical_scrollbar);
- void OnDidChangeScrollOffsetPinningForMainFrame(bool is_pinned_to_left,
- bool is_pinned_to_right);
- void OnDidChangeNumWheelEvents(int count);
-#if defined(OS_ANDROID)
- void OnSelectionRootBoundsChanged(const gfx::Rect& bounds);
-#endif
void OnPasteFromSelectionClipboard();
void OnRouteCloseEvent();
void OnRouteMessageEvent(const ViewMsg_PostMessage_Params& params);
- void OnRunJavaScriptMessage(const base::string16& message,
- const base::string16& default_prompt,
- const GURL& frame_url,
- JavaScriptMessageType type,
- IPC::Message* reply_msg);
- void OnRunBeforeUnloadConfirm(const GURL& frame_url,
- const base::string16& message,
- bool is_reload,
- IPC::Message* reply_msg);
void OnStartDragging(const DropData& drop_data,
blink::WebDragOperationsMask operations_allowed,
const SkBitmap& bitmap,
void OnTargetDropACK();
void OnTakeFocus(bool reverse);
void OnFocusedNodeChanged(bool is_editable_node);
- void OnAddMessageToConsole(int32 level,
- const base::string16& message,
- int32 line_no,
- const base::string16& source_id);
- void OnUpdateInspectorSetting(const std::string& key,
- const std::string& value);
void OnClosePageACK();
- void OnAccessibilityEvents(
- const std::vector<AccessibilityHostMsg_EventParams>& params);
- void OnAccessibilityLocationChanges(
- const std::vector<AccessibilityHostMsg_LocationChangeParams>& params);
- void OnScriptEvalResponse(int id, const base::ListValue& result);
- void OnDidZoomURL(double zoom_level, bool remember, const GURL& url);
- void OnRequestDesktopNotificationPermission(const GURL& origin,
- int callback_id);
- void OnShowDesktopNotification(
- const ShowDesktopNotificationHostMsgParams& params);
- void OnCancelDesktopNotification(int notification_id);
+ void OnDidZoomURL(double zoom_level, const GURL& url);
void OnRunFileChooser(const FileChooserParams& params);
- void OnDidAccessInitialDocument();
void OnFocusedNodeTouched(bool editable);
-#if defined(OS_MACOSX) || defined(OS_ANDROID)
- void OnShowPopup(const ViewHostMsg_ShowPopup_Params& params);
- void OnHidePopup();
-#endif
-
private:
// TODO(nasko): Temporarily friend RenderFrameHostImpl, so we don't duplicate
// utility functions and state needed in both classes, while we move frame
// See BindingsPolicy for details.
int enabled_bindings_;
- // Whether we should buffer outgoing Navigate messages rather than sending
- // them. This will be true when a RenderViewHost is created for a cross-site
- // request, until we hear back from the onbeforeunload handler of the old
- // RenderViewHost.
- // TODO(nasko): Move to RenderFrameHost, as this is per-frame state.
- bool navigations_suspended_;
-
- // We only buffer the params for a suspended navigation while we have a
- // pending RVH for a WebContentsImpl. There will only ever be one suspended
- // navigation, because WebContentsImpl will destroy the pending RVH and create
- // a new one if a second navigation occurs.
- // TODO(nasko): Move to RenderFrameHost, as this is per-frame state.
- scoped_ptr<FrameMsg_Navigate_Params> suspended_nav_params_;
-
- // Whether the initial empty page of this view has been accessed by another
- // page, making it unsafe to show the pending URL. Usually false unless
- // another window tries to modify the blank page. Always false after the
- // first commit.
- bool has_accessed_initial_document_;
+ // The most recent page ID we've heard from the renderer process. This is
+ // used as context when other session history related IPCs arrive.
+ // TODO(creis): Allocate this in WebContents/NavigationController instead.
+ int32 page_id_;
// The current state of this RVH.
// TODO(nasko): Move to RenderFrameHost, as this is per-frame state.
// TODO(nasko): Move to RenderFrameHost, as this is per-frame state.
bool unload_ack_is_for_cross_site_transition_;
- bool are_javascript_messages_suppressed_;
-
- // The mapping of pending javascript calls created by
- // ExecuteJavascriptInWebFrameCallbackResult and their corresponding
- // callbacks.
- std::map<int, JavascriptResultCallback> javascript_callbacks_;
-
- // Accessibility callback for testing.
- base::Callback<void(ui::AXEvent)> accessibility_testing_callback_;
-
- // The most recently received accessibility tree - for testing only.
- scoped_ptr<ui::AXTree> ax_tree_;
-
// True if the render view can be shut down suddenly.
bool sudden_termination_allowed_;
// Set to true if we requested the on screen keyboard to be displayed.
bool virtual_keyboard_requested_;
-#if defined(OS_ANDROID)
- // Manages all the android mediaplayer objects and handling IPCs for video.
- scoped_ptr<BrowserMediaPlayerManager> media_player_manager_;
+#if defined(ENABLE_BROWSER_CDMS)
+ // Manages all the media player and CDM managers and forwards IPCs to them.
+ scoped_ptr<MediaWebContentsObserver> media_web_contents_observer_;
+#endif
+
+#if defined(OS_TIZEN) && defined(ENABLE_MURPHY)
+ // Manages all the media player managers and forwards IPCs to them.
+ scoped_ptr<tizen::MediaWebContentsObserver> media_webcontents_observer_;
#endif
// Used to swap out or shutdown this RVH when the unload event is taking too
// TODO(nasko): Move to RenderFrameHost, as this is per-frame state.
base::Closure pending_shutdown_on_swap_out_;
+ // True if the current focused element is editable.
+ bool is_focused_element_editable_;
+
+ // This is updated every time UpdateWebkitPreferences is called. That method
+ // is in turn called when any of the settings change that the WebPreferences
+ // values depend on.
+ scoped_ptr<WebPreferences> web_preferences_;
+
+ bool updating_web_preferences_;
+
base::WeakPtrFactory<RenderViewHostImpl> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(RenderViewHostImpl);