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

Unified Diff: content/renderer/render_view_impl.h

Issue 112203003: Fix renderer crashes when frame gets detached while injectng user scripts. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Defer frame destruction until event loop. Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/render_view_impl.h
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h
index 530e1ca005dde4f6f3be9ae709e725adb0a6ba0e..84d4b3a61dee310a5fe412f57e6af50e674839f6 100644
--- a/content/renderer/render_view_impl.h
+++ b/content/renderer/render_view_impl.h
@@ -1,1476 +1,1479 @@
-// Copyright (c) 2012 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.
-
-#ifndef CONTENT_RENDERER_RENDER_VIEW_IMPL_H_
-#define CONTENT_RENDERER_RENDER_VIEW_IMPL_H_
-
-#include <deque>
-#include <map>
-#include <set>
-#include <string>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/gtest_prod_util.h"
-#include "base/id_map.h"
-#include "base/memory/linked_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "base/observer_list.h"
-#include "base/process/process.h"
-#include "base/strings/string16.h"
-#include "base/timer/timer.h"
-#include "build/build_config.h"
-#include "cc/input/top_controls_state.h"
-#include "content/common/content_export.h"
-#include "content/common/drag_event_source_info.h"
-#include "content/common/edit_command.h"
-#include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h"
-#include "content/common/navigation_gesture.h"
-#include "content/common/view_message_enums.h"
-#include "content/public/common/javascript_message_type.h"
-#include "content/public/common/page_zoom.h"
-#include "content/public/common/referrer.h"
-#include "content/public/common/renderer_preferences.h"
-#include "content/public/common/stop_find_action.h"
-#include "content/public/common/top_controls_state.h"
-#include "content/public/renderer/render_view.h"
-#include "content/renderer/media/webmediaplayer_delegate.h"
-#include "content/renderer/mouse_lock_dispatcher.h"
-#include "content/renderer/render_frame_impl.h"
-#include "content/renderer/render_widget.h"
-#include "content/renderer/renderer_date_time_picker.h"
-#include "content/renderer/stats_collection_observer.h"
-#include "ipc/ipc_platform_file.h"
-#include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
-#include "third_party/WebKit/public/web/WebAXObject.h"
-#include "third_party/WebKit/public/web/WebConsoleMessage.h"
-#include "third_party/WebKit/public/web/WebDataSource.h"
-#include "third_party/WebKit/public/web/WebFrameClient.h"
-#include "third_party/WebKit/public/web/WebHistoryItem.h"
-#include "third_party/WebKit/public/web/WebIconURL.h"
-#include "third_party/WebKit/public/web/WebInputEvent.h"
-#include "third_party/WebKit/public/web/WebNavigationType.h"
-#include "third_party/WebKit/public/web/WebNode.h"
-#include "third_party/WebKit/public/web/WebPageSerializerClient.h"
-#include "third_party/WebKit/public/web/WebPageVisibilityState.h"
-#include "third_party/WebKit/public/web/WebSecurityOrigin.h"
-#include "third_party/WebKit/public/web/WebViewClient.h"
-#include "ui/surface/transport_dib.h"
-#include "webkit/common/webpreferences.h"
-
-#if defined(OS_ANDROID)
-#include "content/renderer/android/content_detector.h"
-#include "third_party/WebKit/public/web/WebContentDetectionResult.h"
-#endif
-
-#if defined(COMPILER_MSVC)
-// RenderViewImpl is a diamond-shaped hierarchy, with WebWidgetClient at the
-// root. VS warns when we inherit the WebWidgetClient method implementations
-// from RenderWidget. It's safe to ignore that warning.
-#pragma warning(disable: 4250)
-#endif
-
-class CommandLine;
-class PepperDeviceTest;
-class SkBitmap;
-struct PP_NetAddress_Private;
-struct FrameMsg_Navigate_Params;
-struct ViewMsg_PostMessage_Params;
-struct ViewMsg_StopFinding_Params;
-
-namespace ui {
-struct SelectedFileInfo;
-} // namespace ui
-
-namespace blink {
-class WebApplicationCacheHost;
-class WebApplicationCacheHostClient;
-class WebDOMMessageEvent;
-class WebDataSource;
-class WebDateTimeChooserCompletion;
-class WebDragData;
-class WebGeolocationClient;
-class WebGestureEvent;
-class WebIconURL;
-class WebImage;
-class WebPeerConnection00Handler;
-class WebPeerConnection00HandlerClient;
-class WebMediaPlayer;
-class WebMediaPlayerClient;
-class WebMouseEvent;
-class WebPeerConnectionHandler;
-class WebPeerConnectionHandlerClient;
-class WebSocketStreamHandle;
-class WebSpeechInputController;
-class WebSpeechInputListener;
-class WebSpeechRecognizer;
-class WebStorageNamespace;
-class WebTouchEvent;
-class WebURLRequest;
-class WebUserMediaClient;
-struct WebActiveWheelFlingParameters;
-struct WebDateTimeChooserParams;
-struct WebFileChooserParams;
-struct WebFindOptions;
-struct WebMediaPlayerAction;
-struct WebPluginAction;
-struct WebPoint;
-struct WebWindowFeatures;
-
-#if defined(OS_ANDROID)
-class WebHitTestResult;
-#endif
-}
-
-namespace webkit_glue {
-class WebURLResponseExtraDataImpl;
-}
-
-namespace content {
-class BrowserPluginManager;
-class DeviceOrientationDispatcher;
-class DevToolsAgent;
-class DocumentState;
-class ExternalPopupMenu;
-class FaviconHelper;
-class GeolocationDispatcher;
-class ImageResourceFetcher;
-class InputTagSpeechDispatcher;
-class JavaBridgeDispatcher;
-class LoadProgressTracker;
-class MidiDispatcher;
-class MediaStreamClient;
-class MediaStreamDispatcher;
-class MouseLockDispatcher;
-class NavigationState;
-class NotificationProvider;
-class PepperPluginInstanceImpl;
-class RenderViewObserver;
-class RenderViewTest;
-class RendererAccessibility;
-class RendererDateTimePicker;
-class RendererWebColorChooserImpl;
-class SpeechRecognitionDispatcher;
-class WebPluginDelegateProxy;
-struct DropData;
-struct FaviconURL;
-struct FileChooserParams;
-struct RenderViewImplParams;
-
-#if defined(OS_ANDROID)
-class RendererMediaPlayerManager;
-class WebMediaPlayerProxyAndroid;
-#endif
-
-//
-// RenderView is an object that manages a WebView object, and provides a
-// communication interface with an embedding application process
-//
-class CONTENT_EXPORT RenderViewImpl
- : public RenderWidget,
- NON_EXPORTED_BASE(public blink::WebViewClient),
- NON_EXPORTED_BASE(public blink::WebFrameClient),
- NON_EXPORTED_BASE(public blink::WebPageSerializerClient),
- public RenderView,
- NON_EXPORTED_BASE(public WebMediaPlayerDelegate),
- public base::SupportsWeakPtr<RenderViewImpl> {
- public:
- // Creates a new RenderView. |opener_id| is the routing ID of the RenderView
- // responsible for creating this RenderView.
- static RenderViewImpl* Create(
- int32 opener_id,
- const RendererPreferences& renderer_prefs,
- const WebPreferences& webkit_prefs,
- int32 routing_id,
- int32 main_frame_routing_id,
- int32 surface_id,
- int64 session_storage_namespace_id,
- const base::string16& frame_name,
- bool is_renderer_created,
- bool swapped_out,
- bool hidden,
- int32 next_page_id,
- const blink::WebScreenInfo& screen_info,
- unsigned int accessibility_mode,
- bool allow_partial_swap);
-
- // Used by content_layouttest_support to hook into the creation of
- // RenderViewImpls.
- static void InstallCreateHook(
- RenderViewImpl* (*create_render_view_impl)(RenderViewImplParams*));
-
- // Returns the RenderViewImpl containing the given WebView.
- static RenderViewImpl* FromWebView(blink::WebView* webview);
-
- // Returns the RenderViewImpl for the given routing ID.
- static RenderViewImpl* FromRoutingID(int routing_id);
-
- // May return NULL when the view is closing.
- blink::WebView* webview() const;
-
- int history_list_offset() const { return history_list_offset_; }
-
- const WebPreferences& webkit_preferences() const {
- return webkit_preferences_;
- }
-
- const RendererPreferences& renderer_preferences() const {
- return renderer_preferences_;
- }
-
- void set_send_content_state_immediately(bool value) {
- send_content_state_immediately_ = value;
- }
-
- RenderFrameImpl* main_render_frame() { return main_render_frame_.get(); }
-
- MediaStreamDispatcher* media_stream_dispatcher() {
- return media_stream_dispatcher_;
- }
-
- RendererAccessibility* renderer_accessibility() {
- return renderer_accessibility_;
- }
-
- MouseLockDispatcher* mouse_lock_dispatcher() {
- return mouse_lock_dispatcher_;
- }
-
- // Lazily initialize this view's BrowserPluginManager and return it.
- BrowserPluginManager* GetBrowserPluginManager();
-
- // Functions to add and remove observers for this object.
- void AddObserver(RenderViewObserver* observer);
- void RemoveObserver(RenderViewObserver* observer);
-
- // Returns the StatsCollectionObserver associated with this view, or NULL
- // if one wasn't created;
- StatsCollectionObserver* GetStatsCollectionObserver() {
- return stats_collection_observer_.get();
- }
-
- // Adds the given file chooser request to the file_chooser_completion_ queue
- // (see that var for more) and requests the chooser be displayed if there are
- // no other waiting items in the queue.
- //
- // Returns true if the chooser was successfully scheduled. False means we
- // didn't schedule anything.
- bool ScheduleFileChooser(const FileChooserParams& params,
- blink::WebFileChooserCompletion* completion);
-
- void LoadNavigationErrorPage(
- blink::WebFrame* frame,
- const blink::WebURLRequest& failed_request,
- const blink::WebURLError& error,
- bool replace);
-
-#if defined(OS_ANDROID)
- void DismissDateTimeDialog();
-#endif
-
- // Plugin-related functions --------------------------------------------------
-
-#if defined(ENABLE_PLUGINS)
- PepperPluginInstanceImpl* focused_pepper_plugin() {
- return focused_pepper_plugin_;
- }
- PepperPluginInstanceImpl* pepper_last_mouse_event_target() {
- return pepper_last_mouse_event_target_;
- }
- void set_pepper_last_mouse_event_target(PepperPluginInstanceImpl* plugin) {
- pepper_last_mouse_event_target_ = plugin;
- }
-
-#if defined(OS_MACOSX) || defined(OS_WIN)
- // Informs the render view that the given plugin has gained or lost focus.
- void PluginFocusChanged(bool focused, int plugin_id);
-#endif
-
-#if defined(OS_MACOSX)
- // Starts plugin IME.
- void StartPluginIme();
-#endif
-
- // Indicates that the given instance has been created.
- void PepperInstanceCreated(PepperPluginInstanceImpl* instance);
-
- // Indicates that the given instance is being destroyed. This is called from
- // the destructor, so it's important that the instance is not dereferenced
- // from this call.
- void PepperInstanceDeleted(PepperPluginInstanceImpl* instance);
-
- // Notification that the given plugin is focused or unfocused.
- void PepperFocusChanged(PepperPluginInstanceImpl* instance, bool focused);
-
- void RegisterPluginDelegate(WebPluginDelegateProxy* delegate);
- void UnregisterPluginDelegate(WebPluginDelegateProxy* delegate);
-#endif // ENABLE_PLUGINS
-
- void TransferActiveWheelFlingAnimation(
- const blink::WebActiveWheelFlingParameters& params);
-
- // Returns true if the focused element is editable text from the perspective
- // of IME support (also used for on-screen keyboard). Works correctly inside
- // supported PPAPI plug-ins.
- bool HasIMETextFocus();
-
- // Callback for use with GetWindowSnapshot.
- typedef base::Callback<void(
- const gfx::Size&, const std::vector<unsigned char>&)>
- WindowSnapshotCallback;
-
- void GetWindowSnapshot(const WindowSnapshotCallback& callback);
-
- // Dispatches the current navigation state to the browser. Called on a
- // periodic timer so we don't send too many messages.
- void SyncNavigationState();
-
- // Temporary call until all this media code moves to RenderFrame.
- // TODO(jam): remove me
- blink::WebMediaPlayer* CreateMediaPlayer(
- RenderFrame* render_frame,
- blink::WebFrame* frame,
- const blink::WebURL& url,
- blink::WebMediaPlayerClient* client);
- // Temporary call until this code moves to RenderFrame.
- // virtual since overriden by WebTestProxy for layout tests.
- virtual blink::WebNavigationPolicy DecidePolicyForNavigation(
- RenderFrame* render_frame,
- blink::WebFrame* frame,
- blink::WebDataSource::ExtraData* extraData,
- const blink::WebURLRequest& request,
- blink::WebNavigationType type,
- blink::WebNavigationPolicy default_policy,
- bool is_redirect);
-
- // Returns the length of the session history of this RenderView. Note that
- // this only coincides with the actual length of the session history if this
- // RenderView is the currently active RenderView of a WebContents.
- unsigned GetLocalSessionHistoryLengthForTesting() const;
-
- // Invokes OnSetFocus and marks the widget as active depending on the value
- // of |enable|. This is used for layout tests that need to control the focus
- // synchronously from the renderer.
- void SetFocusAndActivateForTesting(bool enable);
-
- // Change the device scale factor and force the compositor to resize.
- void SetDeviceScaleFactorForTesting(float factor);
-
- // Used to force the size of a window when running layout tests.
- void ForceResizeForTesting(const gfx::Size& new_size);
-
- void UseSynchronousResizeModeForTesting(bool enable);
-
- // Control autoresize mode.
- void EnableAutoResizeForTesting(const gfx::Size& min_size,
- const gfx::Size& max_size);
- void DisableAutoResizeForTesting(const gfx::Size& new_size);
-
- // Overrides the MediaStreamClient used when creating MediaStream players.
- // Must be called before any players are created.
- void SetMediaStreamClientForTesting(MediaStreamClient* media_stream_client);
-
- // IPC::Listener implementation ----------------------------------------------
-
- virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
-
- // blink::WebWidgetClient implementation ------------------------------------
-
- // Most methods are handled by RenderWidget.
- virtual void didFocus();
- virtual void didBlur();
- virtual void show(blink::WebNavigationPolicy policy);
- virtual void runModal();
- virtual bool enterFullScreen();
- virtual void exitFullScreen();
- virtual bool requestPointerLock();
- virtual void requestPointerUnlock();
- virtual bool isPointerLocked();
- virtual void didActivateCompositor(int input_handler_identifier);
- virtual void didHandleGestureEvent(const blink::WebGestureEvent& event,
- bool event_cancelled) OVERRIDE;
- virtual void initializeLayerTreeView() OVERRIDE;
-
- // blink::WebViewClient implementation --------------------------------------
-
- virtual blink::WebView* createView(
- blink::WebFrame* creator,
- const blink::WebURLRequest& request,
- const blink::WebWindowFeatures& features,
- const blink::WebString& frame_name,
- blink::WebNavigationPolicy policy,
- bool suppress_opener);
- virtual blink::WebWidget* createPopupMenu(blink::WebPopupType popup_type);
- virtual blink::WebExternalPopupMenu* createExternalPopupMenu(
- const blink::WebPopupMenuInfo& popup_menu_info,
- blink::WebExternalPopupMenuClient* popup_menu_client);
- virtual blink::WebStorageNamespace* createSessionStorageNamespace();
- virtual bool shouldReportDetailedMessageForSource(
- const blink::WebString& source);
- virtual void didAddMessageToConsole(
- const blink::WebConsoleMessage& message,
- const blink::WebString& source_name,
- unsigned source_line,
- const blink::WebString& stack_trace);
- virtual void printPage(blink::WebFrame* frame);
- virtual blink::WebNotificationPresenter* notificationPresenter();
- virtual bool enumerateChosenDirectory(
- const blink::WebString& path,
- blink::WebFileChooserCompletion* chooser_completion);
- virtual void initializeHelperPluginWebFrame(blink::WebHelperPlugin*);
- virtual void didStartLoading(bool to_different_document);
- // DEPRECATED
- virtual void didStartLoading();
- virtual void didStopLoading();
- virtual void didChangeLoadProgress(blink::WebFrame* frame,
- double load_progress);
- virtual void didCancelCompositionOnSelectionChange();
- virtual void didChangeSelection(bool is_selection_empty);
- virtual void didExecuteCommand(const blink::WebString& command_name);
- virtual bool handleCurrentKeyboardEvent();
- virtual blink::WebColorChooser* createColorChooser(
- blink::WebColorChooserClient*,
- const blink::WebColor& initial_color,
- const blink::WebVector<blink::WebColorSuggestion>& suggestions);
- virtual bool runFileChooser(
- const blink::WebFileChooserParams& params,
- blink::WebFileChooserCompletion* chooser_completion);
- virtual void runModalAlertDialog(blink::WebFrame* frame,
- const blink::WebString& message);
- virtual bool runModalConfirmDialog(blink::WebFrame* frame,
- const blink::WebString& message);
- virtual bool runModalPromptDialog(blink::WebFrame* frame,
- const blink::WebString& message,
- const blink::WebString& default_value,
- blink::WebString* actual_value);
- virtual bool runModalBeforeUnloadDialog(blink::WebFrame* frame,
- bool is_reload,
- const blink::WebString& message);
- virtual void showValidationMessage(const blink::WebRect& anchor_in_root_view,
- const blink::WebString& main_text,
- const blink::WebString& sub_text,
- blink::WebTextDirection hint) OVERRIDE;
- virtual void hideValidationMessage() OVERRIDE;
- virtual void moveValidationMessage(
- const blink::WebRect& anchor_in_root_view) OVERRIDE;
-
- // DEPRECATED
- virtual bool runModalBeforeUnloadDialog(blink::WebFrame* frame,
- const blink::WebString& message);
- virtual void showContextMenu(blink::WebFrame* frame,
- const blink::WebContextMenuData& data);
- virtual void clearContextMenu();
- virtual void setStatusText(const blink::WebString& text);
- virtual void setMouseOverURL(const blink::WebURL& url);
- virtual void setKeyboardFocusURL(const blink::WebURL& url);
- virtual void startDragging(blink::WebFrame* frame,
- const blink::WebDragData& data,
- blink::WebDragOperationsMask mask,
- const blink::WebImage& image,
- const blink::WebPoint& imageOffset);
- virtual bool acceptsLoadDrops();
- virtual void focusNext();
- virtual void focusPrevious();
- virtual void focusedNodeChanged(const blink::WebNode& node);
- virtual void numberOfWheelEventHandlersChanged(unsigned num_handlers);
- virtual void didUpdateLayout();
-#if defined(OS_ANDROID)
- virtual bool didTapMultipleTargets(
- const blink::WebGestureEvent& event,
- const blink::WebVector<blink::WebRect>& target_rects);
-#endif
- virtual void navigateBackForwardSoon(int offset);
- virtual int historyBackListCount();
- virtual int historyForwardListCount();
- virtual void postAccessibilityEvent(
- const blink::WebAXObject& obj, blink::WebAXEvent event);
- virtual void didUpdateInspectorSetting(const blink::WebString& key,
- const blink::WebString& value);
- virtual blink::WebGeolocationClient* geolocationClient();
- virtual blink::WebSpeechInputController* speechInputController(
- blink::WebSpeechInputListener* listener);
- virtual blink::WebSpeechRecognizer* speechRecognizer();
- virtual void zoomLimitsChanged(double minimum_level, double maximum_level);
- virtual void zoomLevelChanged();
- virtual double zoomLevelToZoomFactor(double zoom_level) const;
- virtual double zoomFactorToZoomLevel(double factor) const;
- virtual void registerProtocolHandler(const blink::WebString& scheme,
- const blink::WebURL& base_url,
- const blink::WebURL& url,
- const blink::WebString& title);
- virtual blink::WebPageVisibilityState visibilityState() const;
- virtual blink::WebUserMediaClient* userMediaClient();
- virtual blink::WebMIDIClient* webMIDIClient();
- virtual void draggableRegionsChanged();
-
-#if defined(OS_ANDROID)
- virtual void scheduleContentIntent(const blink::WebURL& intent);
- virtual void cancelScheduledContentIntents();
- virtual blink::WebContentDetectionResult detectContentAround(
- const blink::WebHitTestResult& touch_hit);
-
- // Only used on Android since all other platforms implement
- // date and time input fields using MULTIPLE_FIELDS_UI
- virtual bool openDateTimeChooser(const blink::WebDateTimeChooserParams&,
- blink::WebDateTimeChooserCompletion*);
- virtual void didScrollWithKeyboard(const blink::WebSize& delta);
-#endif
-
- // blink::WebFrameClient implementation -------------------------------------
-
- virtual blink::WebMediaPlayer* createMediaPlayer(
- blink::WebFrame* frame,
- const blink::WebURL& url,
- blink::WebMediaPlayerClient* client);
- virtual void didAccessInitialDocument(blink::WebFrame* frame);
- virtual void didDisownOpener(blink::WebFrame* frame);
- virtual void frameDetached(blink::WebFrame* frame);
- virtual void willClose(blink::WebFrame* frame);
- virtual void didMatchCSS(
- blink::WebFrame* frame,
- const blink::WebVector<blink::WebString>& newly_matching_selectors,
- const blink::WebVector<blink::WebString>& stopped_matching_selectors);
- virtual void willSendSubmitEvent(blink::WebFrame* frame,
- const blink::WebFormElement& form);
- virtual void willSubmitForm(blink::WebFrame* frame,
- const blink::WebFormElement& form);
- virtual void didCreateDataSource(blink::WebFrame* frame,
- blink::WebDataSource* datasource);
- virtual void didStartProvisionalLoad(blink::WebFrame* frame);
- virtual void didFailProvisionalLoad(blink::WebFrame* frame,
- const blink::WebURLError& error);
- virtual void didCommitProvisionalLoad(blink::WebFrame* frame,
- bool is_new_navigation);
- virtual void didClearWindowObject(blink::WebFrame* frame, int world_id);
- virtual void didCreateDocumentElement(blink::WebFrame* frame);
- virtual void didReceiveTitle(blink::WebFrame* frame,
- const blink::WebString& title,
- blink::WebTextDirection direction);
- virtual void didChangeIcon(blink::WebFrame*,
- blink::WebIconURL::Type);
- virtual void didFinishDocumentLoad(blink::WebFrame* frame);
- virtual void didHandleOnloadEvents(blink::WebFrame* frame);
- virtual void didFailLoad(blink::WebFrame* frame,
- const blink::WebURLError& error);
- virtual void didFinishLoad(blink::WebFrame* frame);
- virtual void didNavigateWithinPage(blink::WebFrame* frame,
- bool is_new_navigation);
- virtual void didUpdateCurrentHistoryItem(blink::WebFrame* frame);
- virtual void willSendRequest(blink::WebFrame* frame,
- unsigned identifier,
- blink::WebURLRequest& request,
- const blink::WebURLResponse& redirect_response);
- virtual void didReceiveResponse(blink::WebFrame* frame,
- unsigned identifier,
- const blink::WebURLResponse& response);
- virtual void didFinishResourceLoad(blink::WebFrame* frame,
- unsigned identifier);
- virtual void didLoadResourceFromMemoryCache(
- blink::WebFrame* frame,
- const blink::WebURLRequest& request,
- const blink::WebURLResponse&);
- virtual void didDisplayInsecureContent(blink::WebFrame* frame);
- virtual void didRunInsecureContent(
- blink::WebFrame* frame,
- const blink::WebSecurityOrigin& origin,
- const blink::WebURL& target);
- virtual void didExhaustMemoryAvailableForScript(blink::WebFrame* frame);
- virtual void didCreateScriptContext(blink::WebFrame* frame,
- v8::Handle<v8::Context>,
- int extension_group,
- int world_id);
- virtual void willReleaseScriptContext(blink::WebFrame* frame,
- v8::Handle<v8::Context>,
- int world_id);
- virtual void didChangeScrollOffset(blink::WebFrame* frame);
- virtual void willInsertBody(blink::WebFrame* frame);
- virtual void didFirstVisuallyNonEmptyLayout(blink::WebFrame*);
- virtual void didChangeContentsSize(blink::WebFrame* frame,
- const blink::WebSize& size);
- virtual void reportFindInPageMatchCount(int request_id,
- int count,
- bool final_update);
- virtual void reportFindInPageSelection(int request_id,
- int active_match_ordinal,
- const blink::WebRect& sel);
- virtual void requestStorageQuota(
- blink::WebFrame* frame,
- blink::WebStorageQuotaType type,
- unsigned long long requested_size,
- blink::WebStorageQuotaCallbacks callbacks);
- virtual void willOpenSocketStream(
- blink::WebSocketStreamHandle* handle);
- virtual void willStartUsingPeerConnectionHandler(blink::WebFrame* frame,
- blink::WebRTCPeerConnectionHandler* handler);
- virtual bool willCheckAndDispatchMessageEvent(
- blink::WebFrame* sourceFrame,
- blink::WebFrame* targetFrame,
- blink::WebSecurityOrigin targetOrigin,
- blink::WebDOMMessageEvent event);
- virtual blink::WebString acceptLanguages();
- virtual blink::WebString userAgentOverride(
- blink::WebFrame* frame,
- const blink::WebURL& url);
- virtual blink::WebString doNotTrackValue(blink::WebFrame* frame);
- virtual bool allowWebGL(blink::WebFrame* frame, bool default_value);
- virtual void didLoseWebGLContext(
- blink::WebFrame* frame,
- int arb_robustness_status_code);
-
- // blink::WebPageSerializerClient implementation ----------------------------
-
- virtual void didSerializeDataForFrame(
- const blink::WebURL& frame_url,
- const blink::WebCString& data,
- PageSerializationStatus status) OVERRIDE;
-
- // RenderView implementation -------------------------------------------------
-
- virtual bool Send(IPC::Message* message) OVERRIDE;
- virtual RenderFrame* GetMainRenderFrame() OVERRIDE;
- virtual int GetRoutingID() const OVERRIDE;
- virtual int GetPageId() const OVERRIDE;
- virtual gfx::Size GetSize() const OVERRIDE;
- virtual WebPreferences& GetWebkitPreferences() OVERRIDE;
- virtual void SetWebkitPreferences(const WebPreferences& preferences) OVERRIDE;
- virtual blink::WebView* GetWebView() OVERRIDE;
- virtual blink::WebNode GetFocusedNode() const OVERRIDE;
- virtual blink::WebNode GetContextMenuNode() const OVERRIDE;
- virtual bool IsEditableNode(const blink::WebNode& node) const OVERRIDE;
- virtual void EvaluateScript(const base::string16& frame_xpath,
- const base::string16& jscript,
- int id,
- bool notify_result) OVERRIDE;
- virtual bool ShouldDisplayScrollbars(int width, int height) const OVERRIDE;
- virtual int GetEnabledBindings() const OVERRIDE;
- virtual bool GetContentStateImmediately() const OVERRIDE;
- virtual float GetFilteredTimePerFrame() const OVERRIDE;
- virtual blink::WebPageVisibilityState GetVisibilityState() const OVERRIDE;
- virtual void RunModalAlertDialog(blink::WebFrame* frame,
- const blink::WebString& message) OVERRIDE;
- virtual void DidStartLoading() OVERRIDE;
- virtual void DidStopLoading() OVERRIDE;
- virtual void Repaint(const gfx::Size& size) OVERRIDE;
- virtual void SetEditCommandForNextKeyEvent(const std::string& name,
- const std::string& value) OVERRIDE;
- virtual void ClearEditCommands() OVERRIDE;
- virtual SSLStatus GetSSLStatusOfFrame(blink::WebFrame* frame) const OVERRIDE;
- virtual const std::string& GetAcceptLanguages() const OVERRIDE;
-#if defined(OS_ANDROID)
- virtual void UpdateTopControlsState(TopControlsState constraints,
- TopControlsState current,
- bool animate) OVERRIDE;
-#endif
-
- // WebMediaPlayerDelegate implementation -----------------------
-
- virtual void DidPlay(blink::WebMediaPlayer* player) OVERRIDE;
- virtual void DidPause(blink::WebMediaPlayer* player) OVERRIDE;
- virtual void PlayerGone(blink::WebMediaPlayer* player) OVERRIDE;
-
- // Please do not add your stuff randomly to the end here. If there is an
- // appropriate section, add it there. If not, there are some random functions
- // nearer to the top you can add it to.
-
- // Cannot use std::set unfortunately since linked_ptr<> does not support
- // operator<.
- typedef std::vector<linked_ptr<ImageResourceFetcher> >
- ImageResourceFetcherList;
-
- protected:
- // RenderWidget overrides:
- virtual void Close() OVERRIDE;
- virtual void OnResize(const ViewMsg_Resize_Params& params) OVERRIDE;
- virtual void DidInitiatePaint() OVERRIDE;
- virtual void DidFlushPaint() OVERRIDE;
- virtual PepperPluginInstanceImpl* GetBitmapForOptimizedPluginPaint(
- const gfx::Rect& paint_bounds,
- TransportDIB** dib,
- gfx::Rect* location,
- gfx::Rect* clip,
- float* scale_factor) OVERRIDE;
- virtual gfx::Vector2d GetScrollOffset() OVERRIDE;
- virtual void DidHandleKeyEvent() OVERRIDE;
- virtual bool WillHandleMouseEvent(
- const blink::WebMouseEvent& event) OVERRIDE;
- virtual bool WillHandleGestureEvent(
- const blink::WebGestureEvent& event) OVERRIDE;
- virtual void DidHandleMouseEvent(const blink::WebMouseEvent& event) OVERRIDE;
- virtual void DidHandleTouchEvent(const blink::WebTouchEvent& event) OVERRIDE;
- virtual bool HasTouchEventHandlersAt(const gfx::Point& point) const OVERRIDE;
- virtual void OnSetFocus(bool enable) OVERRIDE;
- virtual void OnWasHidden() OVERRIDE;
- virtual void OnWasShown(bool needs_repainting) OVERRIDE;
- virtual GURL GetURLForGraphicsContext3D() OVERRIDE;
- virtual bool ForceCompositingModeEnabled() OVERRIDE;
- virtual void OnImeSetComposition(
- const base::string16& text,
- const std::vector<blink::WebCompositionUnderline>& underlines,
- int selection_start,
- int selection_end) OVERRIDE;
- virtual void OnImeConfirmComposition(const base::string16& text,
- const gfx::Range& replacement_range,
- bool keep_selection) OVERRIDE;
- virtual void SetDeviceScaleFactor(float device_scale_factor) OVERRIDE;
- virtual ui::TextInputType GetTextInputType() OVERRIDE;
- virtual void GetSelectionBounds(gfx::Rect* start, gfx::Rect* end) OVERRIDE;
-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(USE_AURA)
- virtual void GetCompositionCharacterBounds(
- std::vector<gfx::Rect>* character_bounds) OVERRIDE;
- virtual void GetCompositionRange(gfx::Range* range) OVERRIDE;
-#endif
- virtual bool CanComposeInline() OVERRIDE;
- virtual void DidCommitCompositorFrame() OVERRIDE;
- virtual void InstrumentWillBeginFrame(int frame_id) OVERRIDE;
- virtual void InstrumentDidBeginFrame() OVERRIDE;
- virtual void InstrumentDidCancelFrame() OVERRIDE;
- virtual void InstrumentWillComposite() OVERRIDE;
- virtual bool AllowPartialSwap() const OVERRIDE;
-
- protected:
- explicit RenderViewImpl(RenderViewImplParams* params);
-
- void Initialize(RenderViewImplParams* params);
- virtual void SetScreenMetricsEmulationParameters(
- float device_scale_factor,
- const gfx::Point& root_layer_offset,
- float root_layer_scale) OVERRIDE;
-
- // Do not delete directly. This class is reference counted.
- virtual ~RenderViewImpl();
-
- private:
- // For unit tests.
- friend class ExternalPopupMenuTest;
- friend class PepperDeviceTest;
- friend class RendererAccessibilityTest;
- friend class RenderViewTest;
-
- // TODO(nasko): Temporarily friend RenderFrameImpl, so we don't duplicate
- // utility functions needed in both classes, while we move frame specific
- // code away from this class.
- friend class RenderFrameImpl;
-
- FRIEND_TEST_ALL_PREFIXES(ExternalPopupMenuRemoveTest, RemoveOnChange);
- FRIEND_TEST_ALL_PREFIXES(ExternalPopupMenuTest, NormalCase);
- FRIEND_TEST_ALL_PREFIXES(ExternalPopupMenuTest, ShowPopupThenNavigate);
- FRIEND_TEST_ALL_PREFIXES(RendererAccessibilityTest,
- AccessibilityMessagesQueueWhileSwappedOut);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, DecideNavigationPolicyForWebUI);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest,
- DidFailProvisionalLoadWithErrorForError);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest,
- DidFailProvisionalLoadWithErrorForCancellation);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest,
- DontIgnoreBackAfterNavEntryLimit);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, ImeComposition);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, InsertCharacters);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, JSBlockSentAfterPageLoad);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, LastCommittedUpdateState);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnExtendSelectionAndDelete);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnHandleKeyboardEvent);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnImeTypeChanged);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnNavStateChanged);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnSetTextDirection);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnUpdateWebPreferences);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, SendSwapOutACK);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, ReloadWhileSwappedOut);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest,
- SetEditableSelectionAndComposition);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, StaleNavigationsIgnored);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, UpdateTargetURLWithInvalidURL);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest,
- GetCompositionCharacterBoundsTest);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnNavigationHttpPost);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest,
- DecideNavigationPolicyHandlesAllTopLevel);
-#if defined(OS_MACOSX)
- FRIEND_TEST_ALL_PREFIXES(RenderViewTest, MacTestCmdUp);
-#endif
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, SetHistoryLengthAndPrune);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, ZoomLimit);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, NavigateFrame);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, BasicRenderFrame);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, TextInputTypeWithPepper);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest,
- MessageOrderInDidChangeSelection);
- FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, SendCandidateWindowEvents);
- FRIEND_TEST_ALL_PREFIXES(SuppressErrorPageTest, Suppresses);
- FRIEND_TEST_ALL_PREFIXES(SuppressErrorPageTest, DoesNotSuppress);
-
- typedef std::map<GURL, double> HostZoomLevels;
-
- enum ErrorPageType {
- DNS_ERROR,
- HTTP_404,
- CONNECTION_ERROR,
- };
-
- static bool IsReload(const FrameMsg_Navigate_Params& params);
-
- static Referrer GetReferrerFromRequest(
- blink::WebFrame* frame,
- const blink::WebURLRequest& request);
-
- static void NotifyTimezoneChange(blink::WebFrame* frame);
-
- void UpdateTitle(blink::WebFrame* frame, const base::string16& title,
- blink::WebTextDirection title_direction);
- void UpdateSessionHistory(blink::WebFrame* frame);
- void SendUpdateState(const blink::WebHistoryItem& item);
-
- // Update current main frame's encoding and send it to browser window.
- // Since we want to let users see the right encoding info from menu
- // before finishing loading, we call the UpdateEncoding in
- // a) function:DidCommitLoadForFrame. When this function is called,
- // that means we have got first data. In here we try to get encoding
- // of page if it has been specified in http header.
- // b) function:DidReceiveTitle. When this function is called,
- // that means we have got specified title. Because in most of webpages,
- // title tags will follow meta tags. In here we try to get encoding of
- // page if it has been specified in meta tag.
- // c) function:DidFinishDocumentLoadForFrame. When this function is
- // called, that means we have got whole html page. In here we should
- // finally get right encoding of page.
- void UpdateEncoding(blink::WebFrame* frame,
- const std::string& encoding_name);
-
- void OpenURL(blink::WebFrame* frame,
- const GURL& url,
- const Referrer& referrer,
- blink::WebNavigationPolicy policy);
-
- bool RunJavaScriptMessage(JavaScriptMessageType type,
- const base::string16& message,
- const base::string16& default_value,
- const GURL& frame_url,
- base::string16* result);
-
- // Sends a message and runs a nested message loop.
- bool SendAndRunNestedMessageLoop(IPC::SyncMessage* message);
-
- // Called when the "pinned to left/right edge" state needs to be updated.
- void UpdateScrollState(blink::WebFrame* frame);
-
- // IPC message handlers ------------------------------------------------------
- //
- // The documentation for these functions should be in
- // content/common/*_messages.h for the message that the function is handling.
-
- void OnCopy();
- void OnCut();
- void OnDelete();
- void OnExecuteEditCommand(const std::string& name, const std::string& value);
- void OnMoveCaret(const gfx::Point& point);
- void OnPaste();
- void OnPasteAndMatchStyle();
- void OnRedo();
- void OnReplace(const base::string16& text);
- void OnReplaceMisspelling(const base::string16& text);
- void OnScrollFocusedEditableNodeIntoRect(const gfx::Rect& rect);
- void OnSelectAll();
- void OnSelectRange(const gfx::Point& start, const gfx::Point& end);
- void OnSetEditCommandsForNextKeyEvent(const EditCommands& edit_commands);
- void OnUndo();
- void OnUnselect();
- void OnAllowBindings(int enabled_bindings_flags);
- void OnAllowScriptToClose(bool script_can_close);
- void OnCancelDownload(int32 download_id);
- void OnClearFocusedNode();
- void OnClosePage();
- void OnShowContextMenu(const gfx::Point& location);
- void OnCopyImageAt(int x, int y);
- void OnCSSInsertRequest(const base::string16& frame_xpath,
- const std::string& css);
- void OnSetName(const std::string& name);
- void OnDeterminePageLanguage();
- void OnDisableScrollbarsForSmallWindows(
- const gfx::Size& disable_scrollbars_size_limit);
- void OnDragSourceEndedOrMoved(const gfx::Point& client_point,
- const gfx::Point& screen_point,
- bool ended,
- blink::WebDragOperation drag_operation);
- void OnDragSourceSystemDragEnded();
- void OnDragTargetDrop(const gfx::Point& client_pt,
- const gfx::Point& screen_pt,
- int key_modifiers);
- void OnDragTargetDragEnter(const DropData& drop_data,
- const gfx::Point& client_pt,
- const gfx::Point& screen_pt,
- blink::WebDragOperationsMask operations_allowed,
- int key_modifiers);
- void OnDragTargetDragLeave();
- void OnDragTargetDragOver(const gfx::Point& client_pt,
- const gfx::Point& screen_pt,
- blink::WebDragOperationsMask operations_allowed,
- int key_modifiers);
- void OnEnablePreferredSizeChangedMode();
- void OnEnableAutoResize(const gfx::Size& min_size, const gfx::Size& max_size);
- void OnDisableAutoResize(const gfx::Size& new_size);
- void OnEnumerateDirectoryResponse(int id,
- const std::vector<base::FilePath>& paths);
- void OnExtendSelectionAndDelete(int before, int after);
- void OnFileChooserResponse(
- const std::vector<ui::SelectedFileInfo>& files);
- void OnFind(int request_id,
- const base::string16&,
- const blink::WebFindOptions&);
- void OnGetAllSavableResourceLinksForCurrentPage(const GURL& page_url);
- void OnGetSerializedHtmlDataForCurrentPageWithLocalLinks(
- const std::vector<GURL>& links,
- const std::vector<base::FilePath>& local_paths,
- const base::FilePath& local_directory_name);
- void OnMediaPlayerActionAt(const gfx::Point& location,
- const blink::WebMediaPlayerAction& action);
- void OnOrientationChangeEvent(int orientation);
- void OnPluginActionAt(const gfx::Point& location,
- const blink::WebPluginAction& action);
- void OnMoveOrResizeStarted();
- void OnPostMessageEvent(const ViewMsg_PostMessage_Params& params);
- void OnReleaseDisambiguationPopupDIB(TransportDIB::Handle dib_handle);
- void OnReloadFrame();
- void OnResetPageEncodingToDefault();
- void OnScriptEvalRequest(const base::string16& frame_xpath,
- const base::string16& jscript,
- int id,
- bool notify_result);
- void OnSetAccessibilityMode(unsigned int new_mode);
- void OnSetActive(bool active);
- void OnSetBackground(const SkBitmap& background);
- void OnSetCompositionFromExistingText(
- int start, int end,
- const std::vector<blink::WebCompositionUnderline>& underlines);
- void OnExitFullscreen();
- void OnSetEditableSelectionOffsets(int start, int end);
- void OnSetHistoryLengthAndPrune(int history_length, int32 minimum_page_id);
- void OnSetInitialFocus(bool reverse);
- void OnSetPageEncoding(const std::string& encoding_name);
- void OnSetRendererPrefs(const RendererPreferences& renderer_prefs);
- void OnSetWebUIProperty(const std::string& name, const std::string& value);
- void OnSetZoomLevel(double zoom_level);
- void OnSetZoomLevelForLoadingURL(const GURL& url, double zoom_level);
- void OnShouldClose();
- void OnStop();
- void OnStopFinding(StopFindAction action);
- void OnSuppressDialogsUntilSwapOut();
- void OnSwapOut();
- void OnThemeChanged();
- void OnUpdateTargetURLAck();
- void OnUpdateTimezone();
- void OnUpdateWebPreferences(const WebPreferences& prefs);
- void OnZoom(PageZoom zoom);
- void OnZoomFactor(PageZoom zoom, int zoom_center_x, int zoom_center_y);
- void OnEnableViewSourceMode();
- void OnDisownOpener();
- void OnWindowSnapshotCompleted(const int snapshot_id,
- const gfx::Size& size, const std::vector<unsigned char>& png);
-#if defined(OS_ANDROID)
- void OnActivateNearestFindResult(int request_id, float x, float y);
- void OnFindMatchRects(int current_version);
- void OnSelectPopupMenuItems(bool canceled,
- const std::vector<int>& selected_indices);
- void OnUndoScrollFocusedEditableNodeIntoRect();
- void OnUpdateTopControlsState(bool enable_hiding,
- bool enable_showing,
- bool animate);
- void OnPauseVideo();
- void OnExtractSmartClipData(const gfx::Rect& rect);
-#elif defined(OS_MACOSX)
- void OnCopyToFindPboard();
- void OnPluginImeCompositionCompleted(const base::string16& text,
- int plugin_id);
- void OnSelectPopupMenuItem(int selected_index);
- void OnSetInLiveResize(bool in_live_resize);
- void OnSetWindowVisibility(bool visible);
- void OnWindowFrameChanged(const gfx::Rect& window_frame,
- const gfx::Rect& view_frame);
-#endif
-
- // Adding a new message handler? Please add it in alphabetical order above
- // and put it in the same position in the .cc file.
-
- // Misc private functions ----------------------------------------------------
- void ZoomFactorHelper(PageZoom zoom, int zoom_center_x, int zoom_center_y,
- float scaling_increment);
-
- // Check whether the preferred size has changed.
- void CheckPreferredSize();
-
- // Initializes |media_stream_client_|, returning true if successful. Returns
- // false if it wasn't possible to create a MediaStreamClient (e.g., WebRTC is
- // disabled) in which case |media_stream_client_| is NULL.
- bool InitializeMediaStreamClient();
-
- // This callback is triggered when DownloadFavicon completes, either
- // succesfully or with a failure. See DownloadFavicon for more
- // details.
- void DidDownloadFavicon(ImageResourceFetcher* fetcher,
- const SkBitmap& image);
-
- // Requests to download a favicon image. When done, the RenderView is notified
- // by way of DidDownloadFavicon. Returns true if the request was successfully
- // started, false otherwise. id is used to uniquely identify the request and
- // passed back to the DidDownloadFavicon method. If the image has multiple
- // frames, the frame whose size is image_size is returned. If the image
- // doesn't have a frame at the specified size, the first is returned.
- bool DownloadFavicon(int id, const GURL& image_url, int image_size);
-
- // Locates a sub frame with given xpath
- blink::WebFrame* GetChildFrame(const base::string16& frame_xpath) const;
-
- // Returns the URL being loaded by the given frame's request.
- GURL GetLoadingUrl(blink::WebFrame* frame) const;
-
- // Should only be called if this object wraps a PluginDocument.
- blink::WebPlugin* GetWebPluginFromPluginDocument();
-
- // Returns true if the |params| navigation is to an entry that has been
- // cropped due to a recent navigation the browser did not know about.
- bool IsBackForwardToStaleEntry(const FrameMsg_Navigate_Params& params,
- bool is_reload);
-
- // TODO(nasko): Remove this method when code is migrated to use
- // RenderFrameObserver.
- void OnNavigate(const FrameMsg_Navigate_Params& params);
-
- // Make this RenderView show an empty, unscriptable page.
- void NavigateToSwappedOutURL(blink::WebFrame* frame);
-
- // If we initiated a navigation, this function will populate |document_state|
- // with the navigation information saved in OnNavigate().
- void PopulateDocumentStateFromPending(DocumentState* document_state);
-
- // Returns a new NavigationState populated with the navigation information
- // saved in OnNavigate().
- NavigationState* CreateNavigationStateFromPending();
-
- // Processes the command-line flags --enable-viewport,
- // --enable-fixed-layout[=w,h] and --enable-pinch.
- void ProcessViewLayoutFlags(const CommandLine& command_line);
-
-#if defined(OS_ANDROID)
- // Launch an Android content intent with the given URL.
- void LaunchAndroidContentIntent(const GURL& intent_url, size_t request_id);
-
- blink::WebMediaPlayer* CreateAndroidWebMediaPlayer(
- blink::WebFrame* frame,
- const blink::WebURL& url,
- blink::WebMediaPlayerClient* client);
-#endif
-
- blink::WebMediaPlayer* CreateWebMediaPlayerForMediaStream(
- blink::WebFrame* frame,
- const blink::WebURL& url,
- blink::WebMediaPlayerClient* client);
-
- // Sends a reply to the current find operation handling if it was a
- // synchronous find request.
- void SendFindReply(int request_id,
- int match_count,
- int ordinal,
- const blink::WebRect& selection_rect,
- bool final_status_update);
-
- // Starts nav_state_sync_timer_ if it isn't already running.
- void StartNavStateSyncTimerIfNecessary();
-
- // Dispatches the current state of selection on the webpage to the browser if
- // it has changed.
- // TODO(varunjain): delete this method once we figure out how to keep
- // selection handles in sync with the webpage.
- void SyncSelectionIfRequired();
-
-#if defined(OS_POSIX) && !defined(OS_MACOSX)
- void UpdateFontRenderingFromRendererPrefs();
-#else
- void UpdateFontRenderingFromRendererPrefs() {}
-#endif
-
- // Update the target url and tell the browser that the target URL has changed.
- // If |url| is empty, show |fallback_url|.
- void UpdateTargetURL(const GURL& url, const GURL& fallback_url);
-
- // Tells the browser what the new list of favicons for the webpage is.
- void SendUpdateFaviconURL(const std::vector<FaviconURL>& urls);
-
- // Invoked from DidStopLoading(). Sends the current list of loaded favicons to
- // the browser.
- void DidStopLoadingIcons();
-
- // Coordinate conversion -----------------------------------------------------
-
- gfx::RectF ClientRectToPhysicalWindowRect(const gfx::RectF& rect) const;
-
- // RenderFrameImpl accessible state ------------------------------------------
- // The following section is the set of methods that RenderFrameImpl needs
- // to access RenderViewImpl state. The set of state variables are page-level
- // specific, so they don't belong in RenderFrameImpl and should remain in
- // this object.
- ObserverList<RenderViewObserver>& observers() {
- return observers_;
- }
-
- // TODO(nasko): Remove this method when we move to frame proxy objects, since
- // the concept of swapped out will be eliminated.
- void set_is_swapped_out(bool swapped_out) {
- is_swapped_out_ = swapped_out;
- }
-
- NavigationGesture navigation_gesture() {
- return navigation_gesture_;
- }
- void set_navigation_gesture(NavigationGesture gesture) {
- navigation_gesture_ = gesture;
- }
-
- // ---------------------------------------------------------------------------
- // ADDING NEW FUNCTIONS? Please keep private functions alphabetized and put
- // it in the same order in the .cc file as it was in the header.
- // ---------------------------------------------------------------------------
-
- // Settings ------------------------------------------------------------------
-
- WebPreferences webkit_preferences_;
- RendererPreferences renderer_preferences_;
-
- HostZoomLevels host_zoom_levels_;
-
- // Whether content state (such as form state, scroll position and page
- // contents) should be sent to the browser immediately. This is normally
- // false, but set to true by some tests.
- bool send_content_state_immediately_;
-
- // Bitwise-ORed set of extra bindings that have been enabled. See
- // BindingsPolicy for details.
- int enabled_bindings_;
-
- // If true, we send IPC messages when |preferred_size_| changes.
- bool send_preferred_size_changes_;
-
- // If non-empty, and |send_preferred_size_changes_| is true, disable drawing
- // scroll bars on windows smaller than this size. Used for windows that the
- // browser resizes to the size of the content, such as browser action popups.
- // If a render view is set to the minimum size of its content, webkit may add
- // scroll bars. This makes sense for fixed sized windows, but it does not
- // make sense when the size of the view was chosen to fit the content.
- // This setting ensures that no scroll bars are drawn. The size limit exists
- // because if the view grows beyond a size known to the browser, scroll bars
- // should be drawn.
- gfx::Size disable_scrollbars_size_limit_;
-
- // Loading state -------------------------------------------------------------
-
- // True if the top level frame is currently being loaded.
- bool is_loading_;
-
- // The gesture that initiated the current navigation.
- // TODO(nasko): Move to RenderFrame, as this is per-frame state.
- NavigationGesture navigation_gesture_;
-
- // Used for popups.
- bool opened_by_user_gesture_;
-
- // Whether this RenderView was created by a frame that was suppressing its
- // opener. If so, we may want to load pages in a separate process. See
- // decidePolicyForNavigation for details.
- bool opener_suppressed_;
-
- // Whether we must stop creating nested message loops for modal dialogs until
- // OnSwapOut is called. This is necessary because modal dialogs have a
- // PageGroupLoadDeferrer on the stack that interferes with swapping out.
- bool suppress_dialogs_until_swap_out_;
-
- // Holds state pertaining to a navigation that we initiated. This is held by
- // the WebDataSource::ExtraData attribute. We use pending_navigation_state_
- // as a temporary holder for the state until the WebDataSource corresponding
- // to the new navigation is created. See DidCreateDataSource.
- // TODO(nasko): Move to RenderFrame, as this is per-frame state.
- scoped_ptr<FrameMsg_Navigate_Params> pending_navigation_params_;
-
- // Timer used to delay the updating of nav state (see SyncNavigationState).
- base::OneShotTimer<RenderViewImpl> nav_state_sync_timer_;
-
- // Page IDs ------------------------------------------------------------------
- // See documentation in RenderView.
- int32 page_id_;
-
- // Indicates the ID of the last page that we sent a FrameNavigate to the
- // browser for. This is used to determine if the most recent transition
- // generated a history entry (less than page_id_), or not (equal to or
- // greater than). Note that this will be greater than page_id_ if the user
- // goes back.
- int32 last_page_id_sent_to_browser_;
-
- // The next available page ID to use for this RenderView. These IDs are
- // specific to a given RenderView and the frames within it.
- int32 next_page_id_;
-
- // The offset of the current item in the history list.
- int history_list_offset_;
-
- // The RenderView's current impression of the history length. This includes
- // any items that have committed in this process, but because of cross-process
- // navigations, the history may have some entries that were committed in other
- // processes. We won't know about them until the next navigation in this
- // process.
- int history_list_length_;
-
- // The list of page IDs for each history item this RenderView knows about.
- // Some entries may be -1 if they were rendered by other processes or were
- // restored from a previous session. This lets us detect attempts to
- // navigate to stale entries that have been cropped from our history.
- std::vector<int32> history_page_ids_;
-
- // Page info -----------------------------------------------------------------
-
- // The last gotten main frame's encoding.
- std::string last_encoding_name_;
-
- // UI state ------------------------------------------------------------------
-
- // The state of our target_url transmissions. When we receive a request to
- // send a URL to the browser, we set this to TARGET_INFLIGHT until an ACK
- // comes back - if a new request comes in before the ACK, we store the new
- // URL in pending_target_url_ and set the status to TARGET_PENDING. If an
- // ACK comes back and we are in TARGET_PENDING, we send the stored URL and
- // revert to TARGET_INFLIGHT.
- //
- // We don't need a queue of URLs to send, as only the latest is useful.
- enum {
- TARGET_NONE,
- TARGET_INFLIGHT, // We have a request in-flight, waiting for an ACK
- TARGET_PENDING // INFLIGHT + we have a URL waiting to be sent
- } target_url_status_;
-
- // The URL we show the user in the status bar. We use this to determine if we
- // want to send a new one (we do not need to send duplicates). It will be
- // equal to either |mouse_over_url_| or |focus_url_|, depending on which was
- // updated last.
- GURL target_url_;
-
- // The URL the user's mouse is hovering over.
- GURL mouse_over_url_;
-
- // The URL that has keyboard focus.
- GURL focus_url_;
-
- // The next target URL we want to send to the browser.
- GURL pending_target_url_;
-
- // The text selection the last time DidChangeSelection got called. May contain
- // additional characters before and after the selected text, for IMEs. The
- // portion of this string that is the actual selected text starts at index
- // |selection_range_.GetMin() - selection_text_offset_| and has length
- // |selection_range_.length()|.
- base::string16 selection_text_;
- // The offset corresponding to the start of |selection_text_| in the document.
- size_t selection_text_offset_;
- // Range over the document corresponding to the actual selected text (which
- // could correspond to a substring of |selection_text_|; see above).
- gfx::Range selection_range_;
-
-#if defined(OS_ANDROID)
- // Cache the old top controls state constraints. Used when updating
- // current value only without altering the constraints.
- cc::TopControlsState top_controls_constraints_;
-#endif
-
- // View ----------------------------------------------------------------------
-
- // Cache the preferred size of the page in order to prevent sending the IPC
- // when layout() recomputes but doesn't actually change sizes.
- gfx::Size preferred_size_;
-
- // Used to delay determining the preferred size (to avoid intermediate
- // states for the sizes).
- base::OneShotTimer<RenderViewImpl> check_preferred_size_timer_;
-
- // These store the "is main frame is scrolled all the way to the left
- // or right" state that was last sent to the browser.
- bool cached_is_main_frame_pinned_to_left_;
- bool cached_is_main_frame_pinned_to_right_;
-
- // These store the "has scrollbars" state last sent to the browser.
- bool cached_has_main_frame_horizontal_scrollbar_;
- bool cached_has_main_frame_vertical_scrollbar_;
-
- // Helper objects ------------------------------------------------------------
-
- scoped_ptr<RenderFrameImpl> main_render_frame_;
-
- // The next group of objects all implement RenderViewObserver, so are deleted
- // along with the RenderView automatically. This is why we just store
- // weak references.
-
- // Holds a reference to the service which provides desktop notifications.
- NotificationProvider* notification_provider_;
-
- // The geolocation dispatcher attached to this view, lazily initialized.
- GeolocationDispatcher* geolocation_dispatcher_;
-
- // The speech dispatcher attached to this view, lazily initialized.
- InputTagSpeechDispatcher* input_tag_speech_dispatcher_;
-
- // The speech recognition dispatcher attached to this view, lazily
- // initialized.
- SpeechRecognitionDispatcher* speech_recognition_dispatcher_;
-
- // Device orientation dispatcher attached to this view; lazily initialized.
- DeviceOrientationDispatcher* device_orientation_dispatcher_;
-
- // MediaStream dispatcher attached to this view; lazily initialized.
- MediaStreamDispatcher* media_stream_dispatcher_;
-
- // BrowserPluginManager attached to this view; lazily initialized.
- scoped_refptr<BrowserPluginManager> browser_plugin_manager_;
-
- // MediaStreamClient attached to this view; lazily initialized.
- MediaStreamClient* media_stream_client_;
- blink::WebUserMediaClient* web_user_media_client_;
-
- // MidiClient attached to this view; lazily initialized.
- MidiDispatcher* midi_dispatcher_;
-
- DevToolsAgent* devtools_agent_;
-
- // The current accessibility mode.
- unsigned int accessibility_mode_;
-
- // Only valid if |accessibility_mode_| is anything other than
- // AccessibilityModeOff.
- RendererAccessibility* renderer_accessibility_;
-
- // Mouse Lock dispatcher attached to this view.
- MouseLockDispatcher* mouse_lock_dispatcher_;
-
-#if defined(OS_ANDROID)
- // Android Specific ---------------------------------------------------------
-
- // The background color of the document body element. This is used as the
- // default background color for filling the screen areas for which we don't
- // have the actual content.
- SkColor body_background_color_;
-
- // Expected id of the next content intent launched. Used to prevent scheduled
- // intents to be launched if aborted.
- size_t expected_content_intent_id_;
-
- // List of click-based content detectors.
- typedef std::vector< linked_ptr<ContentDetector> > ContentDetectorList;
- ContentDetectorList content_detectors_;
-
- // The media player manager for managing all the media players on this view
- // for communicating with the real media player objects in browser process.
- RendererMediaPlayerManager* media_player_manager_;
-
- // A date/time picker object for date and time related input elements.
- scoped_ptr<RendererDateTimePicker> date_time_picker_client_;
-#endif
-
- // Plugins -------------------------------------------------------------------
-
- // All the currently active plugin delegates for this RenderView; kept so
- // that we can enumerate them to send updates about things like window
- // location or tab focus and visibily. These are non-owning references.
- std::set<WebPluginDelegateProxy*> plugin_delegates_;
-
-#if defined(OS_WIN)
- // The ID of the focused NPAPI plug-in.
- int focused_plugin_id_;
-#endif
-
-#if defined(ENABLE_PLUGINS)
- typedef std::set<PepperPluginInstanceImpl*> PepperPluginSet;
- PepperPluginSet active_pepper_instances_;
-
- // TODO(jam): these belong on RenderFrame, once the browser knows which frame
- // is focused and sends the IPCs which use these to the correct frame. Until
- // then, we must store these on RenderView as that's the one place that knows
- // about all the RenderFrames for a page.
-
- // Whether or not the focus is on a PPAPI plugin
- PepperPluginInstanceImpl* focused_pepper_plugin_;
-
- // The plugin instance that received the last mouse event. It is set to NULL
- // if the last mouse event went to elements other than Pepper plugins.
- // |pepper_last_mouse_event_target_| is not owned by this class. We depend on
- // the RenderFrameImpl to NULL it out when it destructs.
- PepperPluginInstanceImpl* pepper_last_mouse_event_target_;
-#endif
-
- // Misc ----------------------------------------------------------------------
-
- // The current and pending file chooser completion objects. If the queue is
- // nonempty, the first item represents the currently running file chooser
- // callback, and the remaining elements are the other file chooser completion
- // still waiting to be run (in order).
- struct PendingFileChooser;
- std::deque< linked_ptr<PendingFileChooser> > file_chooser_completions_;
-
- // The current directory enumeration callback
- std::map<int, blink::WebFileChooserCompletion*> enumeration_completions_;
- int enumeration_completion_id_;
-
- // Reports load progress to the browser.
- scoped_ptr<LoadProgressTracker> load_progress_tracker_;
-
- // The SessionStorage namespace that we're assigned to has an ID, and that ID
- // is passed to us upon creation. WebKit asks for this ID upon first use and
- // uses it whenever asking the browser process to allocate new storage areas.
- int64 session_storage_namespace_id_;
-
- // Stores edit commands associated to the next key event.
- // Shall be cleared as soon as the next key event is processed.
- EditCommands edit_commands_;
-
- // The external popup for the currently showing select popup.
- scoped_ptr<ExternalPopupMenu> external_popup_menu_;
-
- // The node that the context menu was pressed over.
- blink::WebNode context_menu_node_;
-
- // All the registered observers. We expect this list to be small, so vector
- // is fine.
- ObserverList<RenderViewObserver> observers_;
-
- // Used to inform didChangeSelection() when it is called in the context
- // of handling a InputMsg_SelectRange IPC.
- bool handling_select_range_;
-
- // Wraps the |webwidget_| as a MouseLockDispatcher::LockTarget interface.
- scoped_ptr<MouseLockDispatcher::LockTarget> webwidget_mouse_lock_target_;
-
- // State associated with the GetWindowSnapshot function.
- int next_snapshot_id_;
- typedef std::map<int, WindowSnapshotCallback> PendingSnapshotMap;
- PendingSnapshotMap pending_snapshots_;
-
- // Allows to selectively disable partial buffer swap for this renderer's
- // compositor.
- bool allow_partial_swap_;
-
- // This field stores drag/drop related info for the event that is currently
- // being handled. If the current event results in starting a drag/drop
- // session, this info is sent to the browser along with other drag/drop info.
- DragEventSourceInfo possible_drag_event_info_;
-
- // NOTE: stats_collection_observer_ should be the last members because their
- // constructors call the AddObservers method of RenderViewImpl.
- scoped_ptr<StatsCollectionObserver> stats_collection_observer_;
-
- // ---------------------------------------------------------------------------
- // ADDING NEW DATA? Please see if it fits appropriately in one of the above
- // sections rather than throwing it randomly at the end. If you're adding a
- // bunch of stuff, you should probably create a helper class and put your
- // data and methods on that to avoid bloating RenderView more. You can
- // use the Observer interface to filter IPC messages and receive frame change
- // notifications.
- // ---------------------------------------------------------------------------
-
- DISALLOW_COPY_AND_ASSIGN(RenderViewImpl);
-};
-
-} // namespace content
-
-#endif // CONTENT_RENDERER_RENDER_VIEW_IMPL_H_
+// Copyright (c) 2012 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.
+
+#ifndef CONTENT_RENDERER_RENDER_VIEW_IMPL_H_
+#define CONTENT_RENDERER_RENDER_VIEW_IMPL_H_
+
+#include <deque>
+#include <map>
+#include <set>
+#include <string>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/gtest_prod_util.h"
+#include "base/id_map.h"
+#include "base/memory/linked_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "base/observer_list.h"
+#include "base/process/process.h"
+#include "base/strings/string16.h"
+#include "base/timer/timer.h"
+#include "build/build_config.h"
+#include "cc/input/top_controls_state.h"
+#include "content/common/content_export.h"
+#include "content/common/drag_event_source_info.h"
+#include "content/common/edit_command.h"
+#include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h"
+#include "content/common/navigation_gesture.h"
+#include "content/common/view_message_enums.h"
+#include "content/public/common/javascript_message_type.h"
+#include "content/public/common/page_zoom.h"
+#include "content/public/common/referrer.h"
+#include "content/public/common/renderer_preferences.h"
+#include "content/public/common/stop_find_action.h"
+#include "content/public/common/top_controls_state.h"
+#include "content/public/renderer/render_view.h"
+#include "content/renderer/media/webmediaplayer_delegate.h"
+#include "content/renderer/mouse_lock_dispatcher.h"
+#include "content/renderer/render_frame_impl.h"
+#include "content/renderer/render_widget.h"
+#include "content/renderer/renderer_date_time_picker.h"
+#include "content/renderer/stats_collection_observer.h"
+#include "ipc/ipc_platform_file.h"
+#include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
+#include "third_party/WebKit/public/web/WebAXObject.h"
+#include "third_party/WebKit/public/web/WebConsoleMessage.h"
+#include "third_party/WebKit/public/web/WebDataSource.h"
+#include "third_party/WebKit/public/web/WebFrameClient.h"
+#include "third_party/WebKit/public/web/WebHistoryItem.h"
+#include "third_party/WebKit/public/web/WebIconURL.h"
+#include "third_party/WebKit/public/web/WebInputEvent.h"
+#include "third_party/WebKit/public/web/WebNavigationType.h"
+#include "third_party/WebKit/public/web/WebNode.h"
+#include "third_party/WebKit/public/web/WebPageSerializerClient.h"
+#include "third_party/WebKit/public/web/WebPageVisibilityState.h"
+#include "third_party/WebKit/public/web/WebSecurityOrigin.h"
+#include "third_party/WebKit/public/web/WebViewClient.h"
+#include "ui/surface/transport_dib.h"
+#include "webkit/common/webpreferences.h"
+
+#if defined(OS_ANDROID)
+#include "content/renderer/android/content_detector.h"
+#include "third_party/WebKit/public/web/WebContentDetectionResult.h"
+#endif
+
+#if defined(COMPILER_MSVC)
+// RenderViewImpl is a diamond-shaped hierarchy, with WebWidgetClient at the
+// root. VS warns when we inherit the WebWidgetClient method implementations
+// from RenderWidget. It's safe to ignore that warning.
+#pragma warning(disable: 4250)
+#endif
+
+class CommandLine;
+class PepperDeviceTest;
+class SkBitmap;
+struct PP_NetAddress_Private;
+struct FrameMsg_Navigate_Params;
+struct ViewMsg_PostMessage_Params;
+struct ViewMsg_StopFinding_Params;
+
+namespace ui {
+struct SelectedFileInfo;
+} // namespace ui
+
+namespace blink {
+class WebApplicationCacheHost;
+class WebApplicationCacheHostClient;
+class WebDOMMessageEvent;
+class WebDataSource;
+class WebDateTimeChooserCompletion;
+class WebDragData;
+class WebGeolocationClient;
+class WebGestureEvent;
+class WebIconURL;
+class WebImage;
+class WebPeerConnection00Handler;
+class WebPeerConnection00HandlerClient;
+class WebMediaPlayer;
+class WebMediaPlayerClient;
+class WebMouseEvent;
+class WebPeerConnectionHandler;
+class WebPeerConnectionHandlerClient;
+class WebSocketStreamHandle;
+class WebSpeechInputController;
+class WebSpeechInputListener;
+class WebSpeechRecognizer;
+class WebStorageNamespace;
+class WebTouchEvent;
+class WebURLRequest;
+class WebUserMediaClient;
+struct WebActiveWheelFlingParameters;
+struct WebDateTimeChooserParams;
+struct WebFileChooserParams;
+struct WebFindOptions;
+struct WebMediaPlayerAction;
+struct WebPluginAction;
+struct WebPoint;
+struct WebWindowFeatures;
+
+#if defined(OS_ANDROID)
+class WebHitTestResult;
+#endif
+}
+
+namespace webkit_glue {
+class WebURLResponseExtraDataImpl;
+}
+
+namespace content {
+class BrowserPluginManager;
+class DeviceOrientationDispatcher;
+class DevToolsAgent;
+class DocumentState;
+class ExternalPopupMenu;
+class FaviconHelper;
+class GeolocationDispatcher;
+class ImageResourceFetcher;
+class InputTagSpeechDispatcher;
+class JavaBridgeDispatcher;
+class LoadProgressTracker;
+class MidiDispatcher;
+class MediaStreamClient;
+class MediaStreamDispatcher;
+class MouseLockDispatcher;
+class NavigationState;
+class NotificationProvider;
+class PepperPluginInstanceImpl;
+class RenderViewObserver;
+class RenderViewTest;
+class RendererAccessibility;
+class RendererDateTimePicker;
+class RendererWebColorChooserImpl;
+class SpeechRecognitionDispatcher;
+class WebPluginDelegateProxy;
+struct DropData;
+struct FaviconURL;
+struct FileChooserParams;
+struct RenderViewImplParams;
+
+#if defined(OS_ANDROID)
+class RendererMediaPlayerManager;
+class WebMediaPlayerProxyAndroid;
+#endif
+
+//
+// RenderView is an object that manages a WebView object, and provides a
+// communication interface with an embedding application process
+//
+class CONTENT_EXPORT RenderViewImpl
+ : public RenderWidget,
+ NON_EXPORTED_BASE(public blink::WebViewClient),
+ NON_EXPORTED_BASE(public blink::WebFrameClient),
+ NON_EXPORTED_BASE(public blink::WebPageSerializerClient),
+ public RenderView,
+ NON_EXPORTED_BASE(public WebMediaPlayerDelegate),
+ public base::SupportsWeakPtr<RenderViewImpl> {
+ public:
+ // Creates a new RenderView. |opener_id| is the routing ID of the RenderView
+ // responsible for creating this RenderView.
+ static RenderViewImpl* Create(
+ int32 opener_id,
+ const RendererPreferences& renderer_prefs,
+ const WebPreferences& webkit_prefs,
+ int32 routing_id,
+ int32 main_frame_routing_id,
+ int32 surface_id,
+ int64 session_storage_namespace_id,
+ const base::string16& frame_name,
+ bool is_renderer_created,
+ bool swapped_out,
+ bool hidden,
+ int32 next_page_id,
+ const blink::WebScreenInfo& screen_info,
+ unsigned int accessibility_mode,
+ bool allow_partial_swap);
+
+ // Used by content_layouttest_support to hook into the creation of
+ // RenderViewImpls.
+ static void InstallCreateHook(
+ RenderViewImpl* (*create_render_view_impl)(RenderViewImplParams*));
+
+ // Returns the RenderViewImpl containing the given WebView.
+ static RenderViewImpl* FromWebView(blink::WebView* webview);
+
+ // Returns the RenderViewImpl for the given routing ID.
+ static RenderViewImpl* FromRoutingID(int routing_id);
+
+ // May return NULL when the view is closing.
+ blink::WebView* webview() const;
+
+ int history_list_offset() const { return history_list_offset_; }
+
+ const WebPreferences& webkit_preferences() const {
+ return webkit_preferences_;
+ }
+
+ const RendererPreferences& renderer_preferences() const {
+ return renderer_preferences_;
+ }
+
+ void set_send_content_state_immediately(bool value) {
+ send_content_state_immediately_ = value;
+ }
+
+ RenderFrameImpl* main_render_frame() { return main_render_frame_.get(); }
+
+ MediaStreamDispatcher* media_stream_dispatcher() {
+ return media_stream_dispatcher_;
+ }
+
+ RendererAccessibility* renderer_accessibility() {
+ return renderer_accessibility_;
+ }
+
+ MouseLockDispatcher* mouse_lock_dispatcher() {
+ return mouse_lock_dispatcher_;
+ }
+
+ // Lazily initialize this view's BrowserPluginManager and return it.
+ BrowserPluginManager* GetBrowserPluginManager();
+
+ // Functions to add and remove observers for this object.
+ void AddObserver(RenderViewObserver* observer);
+ void RemoveObserver(RenderViewObserver* observer);
+
+ // Returns the StatsCollectionObserver associated with this view, or NULL
+ // if one wasn't created;
+ StatsCollectionObserver* GetStatsCollectionObserver() {
+ return stats_collection_observer_.get();
+ }
+
+ // Adds the given file chooser request to the file_chooser_completion_ queue
+ // (see that var for more) and requests the chooser be displayed if there are
+ // no other waiting items in the queue.
+ //
+ // Returns true if the chooser was successfully scheduled. False means we
+ // didn't schedule anything.
+ bool ScheduleFileChooser(const FileChooserParams& params,
+ blink::WebFileChooserCompletion* completion);
+
+ void LoadNavigationErrorPage(
+ blink::WebFrame* frame,
+ const blink::WebURLRequest& failed_request,
+ const blink::WebURLError& error,
+ bool replace);
+
+#if defined(OS_ANDROID)
+ void DismissDateTimeDialog();
+#endif
+
+ // Plugin-related functions --------------------------------------------------
+
+#if defined(ENABLE_PLUGINS)
+ PepperPluginInstanceImpl* focused_pepper_plugin() {
+ return focused_pepper_plugin_;
+ }
+ PepperPluginInstanceImpl* pepper_last_mouse_event_target() {
+ return pepper_last_mouse_event_target_;
+ }
+ void set_pepper_last_mouse_event_target(PepperPluginInstanceImpl* plugin) {
+ pepper_last_mouse_event_target_ = plugin;
+ }
+
+#if defined(OS_MACOSX) || defined(OS_WIN)
+ // Informs the render view that the given plugin has gained or lost focus.
+ void PluginFocusChanged(bool focused, int plugin_id);
+#endif
+
+#if defined(OS_MACOSX)
+ // Starts plugin IME.
+ void StartPluginIme();
+#endif
+
+ // Indicates that the given instance has been created.
+ void PepperInstanceCreated(PepperPluginInstanceImpl* instance);
+
+ // Indicates that the given instance is being destroyed. This is called from
+ // the destructor, so it's important that the instance is not dereferenced
+ // from this call.
+ void PepperInstanceDeleted(PepperPluginInstanceImpl* instance);
+
+ // Notification that the given plugin is focused or unfocused.
+ void PepperFocusChanged(PepperPluginInstanceImpl* instance, bool focused);
+
+ void RegisterPluginDelegate(WebPluginDelegateProxy* delegate);
+ void UnregisterPluginDelegate(WebPluginDelegateProxy* delegate);
+#endif // ENABLE_PLUGINS
+
+ void TransferActiveWheelFlingAnimation(
+ const blink::WebActiveWheelFlingParameters& params);
+
+ // Returns true if the focused element is editable text from the perspective
+ // of IME support (also used for on-screen keyboard). Works correctly inside
+ // supported PPAPI plug-ins.
+ bool HasIMETextFocus();
+
+ // Callback for use with GetWindowSnapshot.
+ typedef base::Callback<void(
+ const gfx::Size&, const std::vector<unsigned char>&)>
+ WindowSnapshotCallback;
+
+ void GetWindowSnapshot(const WindowSnapshotCallback& callback);
+
+ // Dispatches the current navigation state to the browser. Called on a
+ // periodic timer so we don't send too many messages.
+ void SyncNavigationState();
+
+ // Temporary call until all this media code moves to RenderFrame.
+ // TODO(jam): remove me
+ blink::WebMediaPlayer* CreateMediaPlayer(
+ RenderFrame* render_frame,
+ blink::WebFrame* frame,
+ const blink::WebURL& url,
+ blink::WebMediaPlayerClient* client);
+ // Temporary call until this code moves to RenderFrame.
+ // virtual since overriden by WebTestProxy for layout tests.
+ virtual blink::WebNavigationPolicy DecidePolicyForNavigation(
+ RenderFrame* render_frame,
+ blink::WebFrame* frame,
+ blink::WebDataSource::ExtraData* extraData,
+ const blink::WebURLRequest& request,
+ blink::WebNavigationType type,
+ blink::WebNavigationPolicy default_policy,
+ bool is_redirect);
+
+ // Returns the length of the session history of this RenderView. Note that
+ // this only coincides with the actual length of the session history if this
+ // RenderView is the currently active RenderView of a WebContents.
+ unsigned GetLocalSessionHistoryLengthForTesting() const;
+
+ // Invokes OnSetFocus and marks the widget as active depending on the value
+ // of |enable|. This is used for layout tests that need to control the focus
+ // synchronously from the renderer.
+ void SetFocusAndActivateForTesting(bool enable);
+
+ // Change the device scale factor and force the compositor to resize.
+ void SetDeviceScaleFactorForTesting(float factor);
+
+ // Used to force the size of a window when running layout tests.
+ void ForceResizeForTesting(const gfx::Size& new_size);
+
+ void UseSynchronousResizeModeForTesting(bool enable);
+
+ // Control autoresize mode.
+ void EnableAutoResizeForTesting(const gfx::Size& min_size,
+ const gfx::Size& max_size);
+ void DisableAutoResizeForTesting(const gfx::Size& new_size);
+
+ // Overrides the MediaStreamClient used when creating MediaStream players.
+ // Must be called before any players are created.
+ void SetMediaStreamClientForTesting(MediaStreamClient* media_stream_client);
+
+ // IPC::Listener implementation ----------------------------------------------
+
+ virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
+
+ // blink::WebWidgetClient implementation ------------------------------------
+
+ // Most methods are handled by RenderWidget.
+ virtual void didFocus();
+ virtual void didBlur();
+ virtual void show(blink::WebNavigationPolicy policy);
+ virtual void runModal();
+ virtual bool enterFullScreen();
+ virtual void exitFullScreen();
+ virtual bool requestPointerLock();
+ virtual void requestPointerUnlock();
+ virtual bool isPointerLocked();
+ virtual void didActivateCompositor(int input_handler_identifier);
+ virtual void didHandleGestureEvent(const blink::WebGestureEvent& event,
+ bool event_cancelled) OVERRIDE;
+ virtual void initializeLayerTreeView() OVERRIDE;
+
+ // blink::WebViewClient implementation --------------------------------------
+
+ virtual blink::WebView* createView(
+ blink::WebFrame* creator,
+ const blink::WebURLRequest& request,
+ const blink::WebWindowFeatures& features,
+ const blink::WebString& frame_name,
+ blink::WebNavigationPolicy policy,
+ bool suppress_opener);
+ virtual blink::WebWidget* createPopupMenu(blink::WebPopupType popup_type);
+ virtual blink::WebExternalPopupMenu* createExternalPopupMenu(
+ const blink::WebPopupMenuInfo& popup_menu_info,
+ blink::WebExternalPopupMenuClient* popup_menu_client);
+ virtual blink::WebStorageNamespace* createSessionStorageNamespace();
+ virtual bool shouldReportDetailedMessageForSource(
+ const blink::WebString& source);
+ virtual void didAddMessageToConsole(
+ const blink::WebConsoleMessage& message,
+ const blink::WebString& source_name,
+ unsigned source_line,
+ const blink::WebString& stack_trace);
+ virtual void printPage(blink::WebFrame* frame);
+ virtual blink::WebNotificationPresenter* notificationPresenter();
+ virtual bool enumerateChosenDirectory(
+ const blink::WebString& path,
+ blink::WebFileChooserCompletion* chooser_completion);
+ virtual void initializeHelperPluginWebFrame(blink::WebHelperPlugin*);
+ virtual void didStartLoading(bool to_different_document);
+ // DEPRECATED
+ virtual void didStartLoading();
+ virtual void didStopLoading();
+ virtual void didChangeLoadProgress(blink::WebFrame* frame,
+ double load_progress);
+ virtual void didCancelCompositionOnSelectionChange();
+ virtual void didChangeSelection(bool is_selection_empty);
+ virtual void didExecuteCommand(const blink::WebString& command_name);
+ virtual bool handleCurrentKeyboardEvent();
+ virtual blink::WebColorChooser* createColorChooser(
+ blink::WebColorChooserClient*,
+ const blink::WebColor& initial_color,
+ const blink::WebVector<blink::WebColorSuggestion>& suggestions);
+ virtual bool runFileChooser(
+ const blink::WebFileChooserParams& params,
+ blink::WebFileChooserCompletion* chooser_completion);
+ virtual void runModalAlertDialog(blink::WebFrame* frame,
+ const blink::WebString& message);
+ virtual bool runModalConfirmDialog(blink::WebFrame* frame,
+ const blink::WebString& message);
+ virtual bool runModalPromptDialog(blink::WebFrame* frame,
+ const blink::WebString& message,
+ const blink::WebString& default_value,
+ blink::WebString* actual_value);
+ virtual bool runModalBeforeUnloadDialog(blink::WebFrame* frame,
+ bool is_reload,
+ const blink::WebString& message);
+ virtual void showValidationMessage(const blink::WebRect& anchor_in_root_view,
+ const blink::WebString& main_text,
+ const blink::WebString& sub_text,
+ blink::WebTextDirection hint) OVERRIDE;
+ virtual void hideValidationMessage() OVERRIDE;
+ virtual void moveValidationMessage(
+ const blink::WebRect& anchor_in_root_view) OVERRIDE;
+
+ // DEPRECATED
+ virtual bool runModalBeforeUnloadDialog(blink::WebFrame* frame,
+ const blink::WebString& message);
+ virtual void showContextMenu(blink::WebFrame* frame,
+ const blink::WebContextMenuData& data);
+ virtual void clearContextMenu();
+ virtual void setStatusText(const blink::WebString& text);
+ virtual void setMouseOverURL(const blink::WebURL& url);
+ virtual void setKeyboardFocusURL(const blink::WebURL& url);
+ virtual void startDragging(blink::WebFrame* frame,
+ const blink::WebDragData& data,
+ blink::WebDragOperationsMask mask,
+ const blink::WebImage& image,
+ const blink::WebPoint& imageOffset);
+ virtual bool acceptsLoadDrops();
+ virtual void focusNext();
+ virtual void focusPrevious();
+ virtual void focusedNodeChanged(const blink::WebNode& node);
+ virtual void numberOfWheelEventHandlersChanged(unsigned num_handlers);
+ virtual void didUpdateLayout();
+#if defined(OS_ANDROID)
+ virtual bool didTapMultipleTargets(
+ const blink::WebGestureEvent& event,
+ const blink::WebVector<blink::WebRect>& target_rects);
+#endif
+ virtual void navigateBackForwardSoon(int offset);
+ virtual int historyBackListCount();
+ virtual int historyForwardListCount();
+ virtual void postAccessibilityEvent(
+ const blink::WebAXObject& obj, blink::WebAXEvent event);
+ virtual void didUpdateInspectorSetting(const blink::WebString& key,
+ const blink::WebString& value);
+ virtual blink::WebGeolocationClient* geolocationClient();
+ virtual blink::WebSpeechInputController* speechInputController(
+ blink::WebSpeechInputListener* listener);
+ virtual blink::WebSpeechRecognizer* speechRecognizer();
+ virtual void zoomLimitsChanged(double minimum_level, double maximum_level);
+ virtual void zoomLevelChanged();
+ virtual double zoomLevelToZoomFactor(double zoom_level) const;
+ virtual double zoomFactorToZoomLevel(double factor) const;
+ virtual void registerProtocolHandler(const blink::WebString& scheme,
+ const blink::WebURL& base_url,
+ const blink::WebURL& url,
+ const blink::WebString& title);
+ virtual blink::WebPageVisibilityState visibilityState() const;
+ virtual blink::WebUserMediaClient* userMediaClient();
+ virtual blink::WebMIDIClient* webMIDIClient();
+ virtual void draggableRegionsChanged();
+
+#if defined(OS_ANDROID)
+ virtual void scheduleContentIntent(const blink::WebURL& intent);
+ virtual void cancelScheduledContentIntents();
+ virtual blink::WebContentDetectionResult detectContentAround(
+ const blink::WebHitTestResult& touch_hit);
+
+ // Only used on Android since all other platforms implement
+ // date and time input fields using MULTIPLE_FIELDS_UI
+ virtual bool openDateTimeChooser(const blink::WebDateTimeChooserParams&,
+ blink::WebDateTimeChooserCompletion*);
+ virtual void didScrollWithKeyboard(const blink::WebSize& delta);
+#endif
+
+ // blink::WebFrameClient implementation -------------------------------------
+
+ virtual blink::WebMediaPlayer* createMediaPlayer(
+ blink::WebFrame* frame,
+ const blink::WebURL& url,
+ blink::WebMediaPlayerClient* client);
+ virtual void didAccessInitialDocument(blink::WebFrame* frame);
+ virtual void didDisownOpener(blink::WebFrame* frame);
+ virtual void frameDetached(blink::WebFrame* frame);
+ virtual void willClose(blink::WebFrame* frame);
+ virtual void didMatchCSS(
+ blink::WebFrame* frame,
+ const blink::WebVector<blink::WebString>& newly_matching_selectors,
+ const blink::WebVector<blink::WebString>& stopped_matching_selectors);
+ virtual void willSendSubmitEvent(blink::WebFrame* frame,
+ const blink::WebFormElement& form);
+ virtual void willSubmitForm(blink::WebFrame* frame,
+ const blink::WebFormElement& form);
+ virtual void didCreateDataSource(blink::WebFrame* frame,
+ blink::WebDataSource* datasource);
+ virtual void didStartProvisionalLoad(blink::WebFrame* frame);
+ virtual void didFailProvisionalLoad(blink::WebFrame* frame,
+ const blink::WebURLError& error);
+ virtual void didCommitProvisionalLoad(blink::WebFrame* frame,
+ bool is_new_navigation);
+ virtual void didClearWindowObject(blink::WebFrame* frame, int world_id);
+ virtual void didCreateDocumentElement(blink::WebFrame* frame);
+ virtual void didReceiveTitle(blink::WebFrame* frame,
+ const blink::WebString& title,
+ blink::WebTextDirection direction);
+ virtual void didChangeIcon(blink::WebFrame*,
+ blink::WebIconURL::Type);
+ virtual void didFinishDocumentLoad(blink::WebFrame* frame);
+ virtual void didHandleOnloadEvents(blink::WebFrame* frame);
+ virtual void didFailLoad(blink::WebFrame* frame,
+ const blink::WebURLError& error);
+ virtual void didFinishLoad(blink::WebFrame* frame);
+ virtual void didNavigateWithinPage(blink::WebFrame* frame,
+ bool is_new_navigation);
+ virtual void didUpdateCurrentHistoryItem(blink::WebFrame* frame);
+ virtual void willSendRequest(blink::WebFrame* frame,
+ unsigned identifier,
+ blink::WebURLRequest& request,
+ const blink::WebURLResponse& redirect_response);
+ virtual void didReceiveResponse(blink::WebFrame* frame,
+ unsigned identifier,
+ const blink::WebURLResponse& response);
+ virtual void didFinishResourceLoad(blink::WebFrame* frame,
+ unsigned identifier);
+ virtual void didLoadResourceFromMemoryCache(
+ blink::WebFrame* frame,
+ const blink::WebURLRequest& request,
+ const blink::WebURLResponse&);
+ virtual void didDisplayInsecureContent(blink::WebFrame* frame);
+ virtual void didRunInsecureContent(
+ blink::WebFrame* frame,
+ const blink::WebSecurityOrigin& origin,
+ const blink::WebURL& target);
+ virtual void didExhaustMemoryAvailableForScript(blink::WebFrame* frame);
+ virtual void didCreateScriptContext(blink::WebFrame* frame,
+ v8::Handle<v8::Context>,
+ int extension_group,
+ int world_id);
+ virtual void willReleaseScriptContext(blink::WebFrame* frame,
+ v8::Handle<v8::Context>,
+ int world_id);
+ virtual void didChangeScrollOffset(blink::WebFrame* frame);
+ virtual void willInsertBody(blink::WebFrame* frame);
+ virtual void didFirstVisuallyNonEmptyLayout(blink::WebFrame*);
+ virtual void didChangeContentsSize(blink::WebFrame* frame,
+ const blink::WebSize& size);
+ virtual void reportFindInPageMatchCount(int request_id,
+ int count,
+ bool final_update);
+ virtual void reportFindInPageSelection(int request_id,
+ int active_match_ordinal,
+ const blink::WebRect& sel);
+ virtual void requestStorageQuota(
+ blink::WebFrame* frame,
+ blink::WebStorageQuotaType type,
+ unsigned long long requested_size,
+ blink::WebStorageQuotaCallbacks callbacks);
+ virtual void willOpenSocketStream(
+ blink::WebSocketStreamHandle* handle);
+ virtual void willStartUsingPeerConnectionHandler(blink::WebFrame* frame,
+ blink::WebRTCPeerConnectionHandler* handler);
+ virtual bool willCheckAndDispatchMessageEvent(
+ blink::WebFrame* sourceFrame,
+ blink::WebFrame* targetFrame,
+ blink::WebSecurityOrigin targetOrigin,
+ blink::WebDOMMessageEvent event);
+ virtual blink::WebString acceptLanguages();
+ virtual blink::WebString userAgentOverride(
+ blink::WebFrame* frame,
+ const blink::WebURL& url);
+ virtual blink::WebString doNotTrackValue(blink::WebFrame* frame);
+ virtual bool allowWebGL(blink::WebFrame* frame, bool default_value);
+ virtual void didLoseWebGLContext(
+ blink::WebFrame* frame,
+ int arb_robustness_status_code);
+
+ // blink::WebPageSerializerClient implementation ----------------------------
+
+ virtual void didSerializeDataForFrame(
+ const blink::WebURL& frame_url,
+ const blink::WebCString& data,
+ PageSerializationStatus status) OVERRIDE;
+
+ // RenderView implementation -------------------------------------------------
+
+ virtual bool Send(IPC::Message* message) OVERRIDE;
+ virtual RenderFrame* GetMainRenderFrame() OVERRIDE;
+ virtual int GetRoutingID() const OVERRIDE;
+ virtual int GetPageId() const OVERRIDE;
+ virtual gfx::Size GetSize() const OVERRIDE;
+ virtual WebPreferences& GetWebkitPreferences() OVERRIDE;
+ virtual void SetWebkitPreferences(const WebPreferences& preferences) OVERRIDE;
+ virtual blink::WebView* GetWebView() OVERRIDE;
+ virtual blink::WebNode GetFocusedNode() const OVERRIDE;
+ virtual blink::WebNode GetContextMenuNode() const OVERRIDE;
+ virtual bool IsEditableNode(const blink::WebNode& node) const OVERRIDE;
+ virtual void EvaluateScript(const base::string16& frame_xpath,
+ const base::string16& jscript,
+ int id,
+ bool notify_result) OVERRIDE;
+ virtual bool ShouldDisplayScrollbars(int width, int height) const OVERRIDE;
+ virtual int GetEnabledBindings() const OVERRIDE;
+ virtual bool GetContentStateImmediately() const OVERRIDE;
+ virtual float GetFilteredTimePerFrame() const OVERRIDE;
+ virtual blink::WebPageVisibilityState GetVisibilityState() const OVERRIDE;
+ virtual void RunModalAlertDialog(blink::WebFrame* frame,
+ const blink::WebString& message) OVERRIDE;
+ virtual void DidStartLoading() OVERRIDE;
+ virtual void DidStopLoading() OVERRIDE;
+ virtual void Repaint(const gfx::Size& size) OVERRIDE;
+ virtual void SetEditCommandForNextKeyEvent(const std::string& name,
+ const std::string& value) OVERRIDE;
+ virtual void ClearEditCommands() OVERRIDE;
+ virtual SSLStatus GetSSLStatusOfFrame(blink::WebFrame* frame) const OVERRIDE;
+ virtual const std::string& GetAcceptLanguages() const OVERRIDE;
+#if defined(OS_ANDROID)
+ virtual void UpdateTopControlsState(TopControlsState constraints,
+ TopControlsState current,
+ bool animate) OVERRIDE;
+#endif
+
+ // WebMediaPlayerDelegate implementation -----------------------
+
+ virtual void DidPlay(blink::WebMediaPlayer* player) OVERRIDE;
+ virtual void DidPause(blink::WebMediaPlayer* player) OVERRIDE;
+ virtual void PlayerGone(blink::WebMediaPlayer* player) OVERRIDE;
+
+ // Please do not add your stuff randomly to the end here. If there is an
+ // appropriate section, add it there. If not, there are some random functions
+ // nearer to the top you can add it to.
+
+ // Cannot use std::set unfortunately since linked_ptr<> does not support
+ // operator<.
+ typedef std::vector<linked_ptr<ImageResourceFetcher> >
+ ImageResourceFetcherList;
+
+ protected:
+ // RenderWidget overrides:
+ virtual void Close() OVERRIDE;
+ virtual void OnResize(const ViewMsg_Resize_Params& params) OVERRIDE;
+ virtual void DidInitiatePaint() OVERRIDE;
+ virtual void DidFlushPaint() OVERRIDE;
+ virtual PepperPluginInstanceImpl* GetBitmapForOptimizedPluginPaint(
+ const gfx::Rect& paint_bounds,
+ TransportDIB** dib,
+ gfx::Rect* location,
+ gfx::Rect* clip,
+ float* scale_factor) OVERRIDE;
+ virtual gfx::Vector2d GetScrollOffset() OVERRIDE;
+ virtual void DidHandleKeyEvent() OVERRIDE;
+ virtual bool WillHandleMouseEvent(
+ const blink::WebMouseEvent& event) OVERRIDE;
+ virtual bool WillHandleGestureEvent(
+ const blink::WebGestureEvent& event) OVERRIDE;
+ virtual void DidHandleMouseEvent(const blink::WebMouseEvent& event) OVERRIDE;
+ virtual void DidHandleTouchEvent(const blink::WebTouchEvent& event) OVERRIDE;
+ virtual bool HasTouchEventHandlersAt(const gfx::Point& point) const OVERRIDE;
+ virtual void OnSetFocus(bool enable) OVERRIDE;
+ virtual void OnWasHidden() OVERRIDE;
+ virtual void OnWasShown(bool needs_repainting) OVERRIDE;
+ virtual GURL GetURLForGraphicsContext3D() OVERRIDE;
+ virtual bool ForceCompositingModeEnabled() OVERRIDE;
+ virtual void OnImeSetComposition(
+ const base::string16& text,
+ const std::vector<blink::WebCompositionUnderline>& underlines,
+ int selection_start,
+ int selection_end) OVERRIDE;
+ virtual void OnImeConfirmComposition(const base::string16& text,
+ const gfx::Range& replacement_range,
+ bool keep_selection) OVERRIDE;
+ virtual void SetDeviceScaleFactor(float device_scale_factor) OVERRIDE;
+ virtual ui::TextInputType GetTextInputType() OVERRIDE;
+ virtual void GetSelectionBounds(gfx::Rect* start, gfx::Rect* end) OVERRIDE;
+#if defined(OS_MACOSX) || defined(OS_WIN) || defined(USE_AURA)
+ virtual void GetCompositionCharacterBounds(
+ std::vector<gfx::Rect>* character_bounds) OVERRIDE;
+ virtual void GetCompositionRange(gfx::Range* range) OVERRIDE;
+#endif
+ virtual bool CanComposeInline() OVERRIDE;
+ virtual void DidCommitCompositorFrame() OVERRIDE;
+ virtual void InstrumentWillBeginFrame(int frame_id) OVERRIDE;
+ virtual void InstrumentDidBeginFrame() OVERRIDE;
+ virtual void InstrumentDidCancelFrame() OVERRIDE;
+ virtual void InstrumentWillComposite() OVERRIDE;
+ virtual bool AllowPartialSwap() const OVERRIDE;
+
+ protected:
+ explicit RenderViewImpl(RenderViewImplParams* params);
+
+ void Initialize(RenderViewImplParams* params);
+ virtual void SetScreenMetricsEmulationParameters(
+ float device_scale_factor,
+ const gfx::Point& root_layer_offset,
+ float root_layer_scale) OVERRIDE;
+
+ // Do not delete directly. This class is reference counted.
+ virtual ~RenderViewImpl();
+
+ private:
+ // For unit tests.
+ friend class ExternalPopupMenuTest;
+ friend class PepperDeviceTest;
+ friend class RendererAccessibilityTest;
+ friend class RenderViewTest;
+
+ // TODO(nasko): Temporarily friend RenderFrameImpl, so we don't duplicate
+ // utility functions needed in both classes, while we move frame specific
+ // code away from this class.
+ friend class RenderFrameImpl;
+
+ FRIEND_TEST_ALL_PREFIXES(ExternalPopupMenuRemoveTest, RemoveOnChange);
+ FRIEND_TEST_ALL_PREFIXES(ExternalPopupMenuTest, NormalCase);
+ FRIEND_TEST_ALL_PREFIXES(ExternalPopupMenuTest, ShowPopupThenNavigate);
+ FRIEND_TEST_ALL_PREFIXES(RendererAccessibilityTest,
+ AccessibilityMessagesQueueWhileSwappedOut);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, DecideNavigationPolicyForWebUI);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest,
+ DidFailProvisionalLoadWithErrorForError);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest,
+ DidFailProvisionalLoadWithErrorForCancellation);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest,
+ DontIgnoreBackAfterNavEntryLimit);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, ImeComposition);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, InsertCharacters);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, JSBlockSentAfterPageLoad);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, LastCommittedUpdateState);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnExtendSelectionAndDelete);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnHandleKeyboardEvent);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnImeTypeChanged);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnNavStateChanged);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnSetTextDirection);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnUpdateWebPreferences);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, SendSwapOutACK);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, ReloadWhileSwappedOut);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest,
+ SetEditableSelectionAndComposition);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, StaleNavigationsIgnored);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, UpdateTargetURLWithInvalidURL);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest,
+ GetCompositionCharacterBoundsTest);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, OnNavigationHttpPost);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest,
+ DecideNavigationPolicyHandlesAllTopLevel);
+#if defined(OS_MACOSX)
+ FRIEND_TEST_ALL_PREFIXES(RenderViewTest, MacTestCmdUp);
+#endif
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, SetHistoryLengthAndPrune);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, ZoomLimit);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, NavigateFrame);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, BasicRenderFrame);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, TextInputTypeWithPepper);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest,
+ MessageOrderInDidChangeSelection);
+ FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, SendCandidateWindowEvents);
+ FRIEND_TEST_ALL_PREFIXES(SuppressErrorPageTest, Suppresses);
+ FRIEND_TEST_ALL_PREFIXES(SuppressErrorPageTest, DoesNotSuppress);
+ FRIEND_TEST_ALL_PREFIXES(SynchronousFrameRemovalOnLoadTest,
+ DynamicallyInsertedFrame);
+ FRIEND_TEST_ALL_PREFIXES(SynchronousFrameRemovalOnLoadTest, StaticFrame);
dcheng 2014/02/26 19:37:23 Are these friend declarations needed? I don't see
+
+ typedef std::map<GURL, double> HostZoomLevels;
+
+ enum ErrorPageType {
+ DNS_ERROR,
+ HTTP_404,
+ CONNECTION_ERROR,
+ };
+
+ static bool IsReload(const FrameMsg_Navigate_Params& params);
+
+ static Referrer GetReferrerFromRequest(
+ blink::WebFrame* frame,
+ const blink::WebURLRequest& request);
+
+ static void NotifyTimezoneChange(blink::WebFrame* frame);
+
+ void UpdateTitle(blink::WebFrame* frame, const base::string16& title,
+ blink::WebTextDirection title_direction);
+ void UpdateSessionHistory(blink::WebFrame* frame);
+ void SendUpdateState(const blink::WebHistoryItem& item);
+
+ // Update current main frame's encoding and send it to browser window.
+ // Since we want to let users see the right encoding info from menu
+ // before finishing loading, we call the UpdateEncoding in
+ // a) function:DidCommitLoadForFrame. When this function is called,
+ // that means we have got first data. In here we try to get encoding
+ // of page if it has been specified in http header.
+ // b) function:DidReceiveTitle. When this function is called,
+ // that means we have got specified title. Because in most of webpages,
+ // title tags will follow meta tags. In here we try to get encoding of
+ // page if it has been specified in meta tag.
+ // c) function:DidFinishDocumentLoadForFrame. When this function is
+ // called, that means we have got whole html page. In here we should
+ // finally get right encoding of page.
+ void UpdateEncoding(blink::WebFrame* frame,
+ const std::string& encoding_name);
+
+ void OpenURL(blink::WebFrame* frame,
+ const GURL& url,
+ const Referrer& referrer,
+ blink::WebNavigationPolicy policy);
+
+ bool RunJavaScriptMessage(JavaScriptMessageType type,
+ const base::string16& message,
+ const base::string16& default_value,
+ const GURL& frame_url,
+ base::string16* result);
+
+ // Sends a message and runs a nested message loop.
+ bool SendAndRunNestedMessageLoop(IPC::SyncMessage* message);
+
+ // Called when the "pinned to left/right edge" state needs to be updated.
+ void UpdateScrollState(blink::WebFrame* frame);
+
+ // IPC message handlers ------------------------------------------------------
+ //
+ // The documentation for these functions should be in
+ // content/common/*_messages.h for the message that the function is handling.
+
+ void OnCopy();
+ void OnCut();
+ void OnDelete();
+ void OnExecuteEditCommand(const std::string& name, const std::string& value);
+ void OnMoveCaret(const gfx::Point& point);
+ void OnPaste();
+ void OnPasteAndMatchStyle();
+ void OnRedo();
+ void OnReplace(const base::string16& text);
+ void OnReplaceMisspelling(const base::string16& text);
+ void OnScrollFocusedEditableNodeIntoRect(const gfx::Rect& rect);
+ void OnSelectAll();
+ void OnSelectRange(const gfx::Point& start, const gfx::Point& end);
+ void OnSetEditCommandsForNextKeyEvent(const EditCommands& edit_commands);
+ void OnUndo();
+ void OnUnselect();
+ void OnAllowBindings(int enabled_bindings_flags);
+ void OnAllowScriptToClose(bool script_can_close);
+ void OnCancelDownload(int32 download_id);
+ void OnClearFocusedNode();
+ void OnClosePage();
+ void OnShowContextMenu(const gfx::Point& location);
+ void OnCopyImageAt(int x, int y);
+ void OnCSSInsertRequest(const base::string16& frame_xpath,
+ const std::string& css);
+ void OnSetName(const std::string& name);
+ void OnDeterminePageLanguage();
+ void OnDisableScrollbarsForSmallWindows(
+ const gfx::Size& disable_scrollbars_size_limit);
+ void OnDragSourceEndedOrMoved(const gfx::Point& client_point,
+ const gfx::Point& screen_point,
+ bool ended,
+ blink::WebDragOperation drag_operation);
+ void OnDragSourceSystemDragEnded();
+ void OnDragTargetDrop(const gfx::Point& client_pt,
+ const gfx::Point& screen_pt,
+ int key_modifiers);
+ void OnDragTargetDragEnter(const DropData& drop_data,
+ const gfx::Point& client_pt,
+ const gfx::Point& screen_pt,
+ blink::WebDragOperationsMask operations_allowed,
+ int key_modifiers);
+ void OnDragTargetDragLeave();
+ void OnDragTargetDragOver(const gfx::Point& client_pt,
+ const gfx::Point& screen_pt,
+ blink::WebDragOperationsMask operations_allowed,
+ int key_modifiers);
+ void OnEnablePreferredSizeChangedMode();
+ void OnEnableAutoResize(const gfx::Size& min_size, const gfx::Size& max_size);
+ void OnDisableAutoResize(const gfx::Size& new_size);
+ void OnEnumerateDirectoryResponse(int id,
+ const std::vector<base::FilePath>& paths);
+ void OnExtendSelectionAndDelete(int before, int after);
+ void OnFileChooserResponse(
+ const std::vector<ui::SelectedFileInfo>& files);
+ void OnFind(int request_id,
+ const base::string16&,
+ const blink::WebFindOptions&);
+ void OnGetAllSavableResourceLinksForCurrentPage(const GURL& page_url);
+ void OnGetSerializedHtmlDataForCurrentPageWithLocalLinks(
+ const std::vector<GURL>& links,
+ const std::vector<base::FilePath>& local_paths,
+ const base::FilePath& local_directory_name);
+ void OnMediaPlayerActionAt(const gfx::Point& location,
+ const blink::WebMediaPlayerAction& action);
+ void OnOrientationChangeEvent(int orientation);
+ void OnPluginActionAt(const gfx::Point& location,
+ const blink::WebPluginAction& action);
+ void OnMoveOrResizeStarted();
+ void OnPostMessageEvent(const ViewMsg_PostMessage_Params& params);
+ void OnReleaseDisambiguationPopupDIB(TransportDIB::Handle dib_handle);
+ void OnReloadFrame();
+ void OnResetPageEncodingToDefault();
+ void OnScriptEvalRequest(const base::string16& frame_xpath,
+ const base::string16& jscript,
+ int id,
+ bool notify_result);
+ void OnSetAccessibilityMode(unsigned int new_mode);
+ void OnSetActive(bool active);
+ void OnSetBackground(const SkBitmap& background);
+ void OnSetCompositionFromExistingText(
+ int start, int end,
+ const std::vector<blink::WebCompositionUnderline>& underlines);
+ void OnExitFullscreen();
+ void OnSetEditableSelectionOffsets(int start, int end);
+ void OnSetHistoryLengthAndPrune(int history_length, int32 minimum_page_id);
+ void OnSetInitialFocus(bool reverse);
+ void OnSetPageEncoding(const std::string& encoding_name);
+ void OnSetRendererPrefs(const RendererPreferences& renderer_prefs);
+ void OnSetWebUIProperty(const std::string& name, const std::string& value);
+ void OnSetZoomLevel(double zoom_level);
+ void OnSetZoomLevelForLoadingURL(const GURL& url, double zoom_level);
+ void OnShouldClose();
+ void OnStop();
+ void OnStopFinding(StopFindAction action);
+ void OnSuppressDialogsUntilSwapOut();
+ void OnSwapOut();
+ void OnThemeChanged();
+ void OnUpdateTargetURLAck();
+ void OnUpdateTimezone();
+ void OnUpdateWebPreferences(const WebPreferences& prefs);
+ void OnZoom(PageZoom zoom);
+ void OnZoomFactor(PageZoom zoom, int zoom_center_x, int zoom_center_y);
+ void OnEnableViewSourceMode();
+ void OnDisownOpener();
+ void OnWindowSnapshotCompleted(const int snapshot_id,
+ const gfx::Size& size, const std::vector<unsigned char>& png);
+#if defined(OS_ANDROID)
+ void OnActivateNearestFindResult(int request_id, float x, float y);
+ void OnFindMatchRects(int current_version);
+ void OnSelectPopupMenuItems(bool canceled,
+ const std::vector<int>& selected_indices);
+ void OnUndoScrollFocusedEditableNodeIntoRect();
+ void OnUpdateTopControlsState(bool enable_hiding,
+ bool enable_showing,
+ bool animate);
+ void OnPauseVideo();
+ void OnExtractSmartClipData(const gfx::Rect& rect);
+#elif defined(OS_MACOSX)
+ void OnCopyToFindPboard();
+ void OnPluginImeCompositionCompleted(const base::string16& text,
+ int plugin_id);
+ void OnSelectPopupMenuItem(int selected_index);
+ void OnSetInLiveResize(bool in_live_resize);
+ void OnSetWindowVisibility(bool visible);
+ void OnWindowFrameChanged(const gfx::Rect& window_frame,
+ const gfx::Rect& view_frame);
+#endif
+
+ // Adding a new message handler? Please add it in alphabetical order above
+ // and put it in the same position in the .cc file.
+
+ // Misc private functions ----------------------------------------------------
+ void ZoomFactorHelper(PageZoom zoom, int zoom_center_x, int zoom_center_y,
+ float scaling_increment);
+
+ // Check whether the preferred size has changed.
+ void CheckPreferredSize();
+
+ // Initializes |media_stream_client_|, returning true if successful. Returns
+ // false if it wasn't possible to create a MediaStreamClient (e.g., WebRTC is
+ // disabled) in which case |media_stream_client_| is NULL.
+ bool InitializeMediaStreamClient();
+
+ // This callback is triggered when DownloadFavicon completes, either
+ // succesfully or with a failure. See DownloadFavicon for more
+ // details.
+ void DidDownloadFavicon(ImageResourceFetcher* fetcher,
+ const SkBitmap& image);
+
+ // Requests to download a favicon image. When done, the RenderView is notified
+ // by way of DidDownloadFavicon. Returns true if the request was successfully
+ // started, false otherwise. id is used to uniquely identify the request and
+ // passed back to the DidDownloadFavicon method. If the image has multiple
+ // frames, the frame whose size is image_size is returned. If the image
+ // doesn't have a frame at the specified size, the first is returned.
+ bool DownloadFavicon(int id, const GURL& image_url, int image_size);
+
+ // Locates a sub frame with given xpath
+ blink::WebFrame* GetChildFrame(const base::string16& frame_xpath) const;
+
+ // Returns the URL being loaded by the given frame's request.
+ GURL GetLoadingUrl(blink::WebFrame* frame) const;
+
+ // Should only be called if this object wraps a PluginDocument.
+ blink::WebPlugin* GetWebPluginFromPluginDocument();
+
+ // Returns true if the |params| navigation is to an entry that has been
+ // cropped due to a recent navigation the browser did not know about.
+ bool IsBackForwardToStaleEntry(const FrameMsg_Navigate_Params& params,
+ bool is_reload);
+
+ // TODO(nasko): Remove this method when code is migrated to use
+ // RenderFrameObserver.
+ void OnNavigate(const FrameMsg_Navigate_Params& params);
+
+ // Make this RenderView show an empty, unscriptable page.
+ void NavigateToSwappedOutURL(blink::WebFrame* frame);
+
+ // If we initiated a navigation, this function will populate |document_state|
+ // with the navigation information saved in OnNavigate().
+ void PopulateDocumentStateFromPending(DocumentState* document_state);
+
+ // Returns a new NavigationState populated with the navigation information
+ // saved in OnNavigate().
+ NavigationState* CreateNavigationStateFromPending();
+
+ // Processes the command-line flags --enable-viewport,
+ // --enable-fixed-layout[=w,h] and --enable-pinch.
+ void ProcessViewLayoutFlags(const CommandLine& command_line);
+
+#if defined(OS_ANDROID)
+ // Launch an Android content intent with the given URL.
+ void LaunchAndroidContentIntent(const GURL& intent_url, size_t request_id);
+
+ blink::WebMediaPlayer* CreateAndroidWebMediaPlayer(
+ blink::WebFrame* frame,
+ const blink::WebURL& url,
+ blink::WebMediaPlayerClient* client);
+#endif
+
+ blink::WebMediaPlayer* CreateWebMediaPlayerForMediaStream(
+ blink::WebFrame* frame,
+ const blink::WebURL& url,
+ blink::WebMediaPlayerClient* client);
+
+ // Sends a reply to the current find operation handling if it was a
+ // synchronous find request.
+ void SendFindReply(int request_id,
+ int match_count,
+ int ordinal,
+ const blink::WebRect& selection_rect,
+ bool final_status_update);
+
+ // Starts nav_state_sync_timer_ if it isn't already running.
+ void StartNavStateSyncTimerIfNecessary();
+
+ // Dispatches the current state of selection on the webpage to the browser if
+ // it has changed.
+ // TODO(varunjain): delete this method once we figure out how to keep
+ // selection handles in sync with the webpage.
+ void SyncSelectionIfRequired();
+
+#if defined(OS_POSIX) && !defined(OS_MACOSX)
+ void UpdateFontRenderingFromRendererPrefs();
+#else
+ void UpdateFontRenderingFromRendererPrefs() {}
+#endif
+
+ // Update the target url and tell the browser that the target URL has changed.
+ // If |url| is empty, show |fallback_url|.
+ void UpdateTargetURL(const GURL& url, const GURL& fallback_url);
+
+ // Tells the browser what the new list of favicons for the webpage is.
+ void SendUpdateFaviconURL(const std::vector<FaviconURL>& urls);
+
+ // Invoked from DidStopLoading(). Sends the current list of loaded favicons to
+ // the browser.
+ void DidStopLoadingIcons();
+
+ // Coordinate conversion -----------------------------------------------------
+
+ gfx::RectF ClientRectToPhysicalWindowRect(const gfx::RectF& rect) const;
+
+ // RenderFrameImpl accessible state ------------------------------------------
+ // The following section is the set of methods that RenderFrameImpl needs
+ // to access RenderViewImpl state. The set of state variables are page-level
+ // specific, so they don't belong in RenderFrameImpl and should remain in
+ // this object.
+ ObserverList<RenderViewObserver>& observers() {
+ return observers_;
+ }
+
+ // TODO(nasko): Remove this method when we move to frame proxy objects, since
+ // the concept of swapped out will be eliminated.
+ void set_is_swapped_out(bool swapped_out) {
+ is_swapped_out_ = swapped_out;
+ }
+
+ NavigationGesture navigation_gesture() {
+ return navigation_gesture_;
+ }
+ void set_navigation_gesture(NavigationGesture gesture) {
+ navigation_gesture_ = gesture;
+ }
+
+ // ---------------------------------------------------------------------------
+ // ADDING NEW FUNCTIONS? Please keep private functions alphabetized and put
+ // it in the same order in the .cc file as it was in the header.
+ // ---------------------------------------------------------------------------
+
+ // Settings ------------------------------------------------------------------
+
+ WebPreferences webkit_preferences_;
+ RendererPreferences renderer_preferences_;
+
+ HostZoomLevels host_zoom_levels_;
+
+ // Whether content state (such as form state, scroll position and page
+ // contents) should be sent to the browser immediately. This is normally
+ // false, but set to true by some tests.
+ bool send_content_state_immediately_;
+
+ // Bitwise-ORed set of extra bindings that have been enabled. See
+ // BindingsPolicy for details.
+ int enabled_bindings_;
+
+ // If true, we send IPC messages when |preferred_size_| changes.
+ bool send_preferred_size_changes_;
+
+ // If non-empty, and |send_preferred_size_changes_| is true, disable drawing
+ // scroll bars on windows smaller than this size. Used for windows that the
+ // browser resizes to the size of the content, such as browser action popups.
+ // If a render view is set to the minimum size of its content, webkit may add
+ // scroll bars. This makes sense for fixed sized windows, but it does not
+ // make sense when the size of the view was chosen to fit the content.
+ // This setting ensures that no scroll bars are drawn. The size limit exists
+ // because if the view grows beyond a size known to the browser, scroll bars
+ // should be drawn.
+ gfx::Size disable_scrollbars_size_limit_;
+
+ // Loading state -------------------------------------------------------------
+
+ // True if the top level frame is currently being loaded.
+ bool is_loading_;
+
+ // The gesture that initiated the current navigation.
+ // TODO(nasko): Move to RenderFrame, as this is per-frame state.
+ NavigationGesture navigation_gesture_;
+
+ // Used for popups.
+ bool opened_by_user_gesture_;
+
+ // Whether this RenderView was created by a frame that was suppressing its
+ // opener. If so, we may want to load pages in a separate process. See
+ // decidePolicyForNavigation for details.
+ bool opener_suppressed_;
+
+ // Whether we must stop creating nested message loops for modal dialogs until
+ // OnSwapOut is called. This is necessary because modal dialogs have a
+ // PageGroupLoadDeferrer on the stack that interferes with swapping out.
+ bool suppress_dialogs_until_swap_out_;
+
+ // Holds state pertaining to a navigation that we initiated. This is held by
+ // the WebDataSource::ExtraData attribute. We use pending_navigation_state_
+ // as a temporary holder for the state until the WebDataSource corresponding
+ // to the new navigation is created. See DidCreateDataSource.
+ // TODO(nasko): Move to RenderFrame, as this is per-frame state.
+ scoped_ptr<FrameMsg_Navigate_Params> pending_navigation_params_;
+
+ // Timer used to delay the updating of nav state (see SyncNavigationState).
+ base::OneShotTimer<RenderViewImpl> nav_state_sync_timer_;
+
+ // Page IDs ------------------------------------------------------------------
+ // See documentation in RenderView.
+ int32 page_id_;
+
+ // Indicates the ID of the last page that we sent a FrameNavigate to the
+ // browser for. This is used to determine if the most recent transition
+ // generated a history entry (less than page_id_), or not (equal to or
+ // greater than). Note that this will be greater than page_id_ if the user
+ // goes back.
+ int32 last_page_id_sent_to_browser_;
+
+ // The next available page ID to use for this RenderView. These IDs are
+ // specific to a given RenderView and the frames within it.
+ int32 next_page_id_;
+
+ // The offset of the current item in the history list.
+ int history_list_offset_;
+
+ // The RenderView's current impression of the history length. This includes
+ // any items that have committed in this process, but because of cross-process
+ // navigations, the history may have some entries that were committed in other
+ // processes. We won't know about them until the next navigation in this
+ // process.
+ int history_list_length_;
+
+ // The list of page IDs for each history item this RenderView knows about.
+ // Some entries may be -1 if they were rendered by other processes or were
+ // restored from a previous session. This lets us detect attempts to
+ // navigate to stale entries that have been cropped from our history.
+ std::vector<int32> history_page_ids_;
+
+ // Page info -----------------------------------------------------------------
+
+ // The last gotten main frame's encoding.
+ std::string last_encoding_name_;
+
+ // UI state ------------------------------------------------------------------
+
+ // The state of our target_url transmissions. When we receive a request to
+ // send a URL to the browser, we set this to TARGET_INFLIGHT until an ACK
+ // comes back - if a new request comes in before the ACK, we store the new
+ // URL in pending_target_url_ and set the status to TARGET_PENDING. If an
+ // ACK comes back and we are in TARGET_PENDING, we send the stored URL and
+ // revert to TARGET_INFLIGHT.
+ //
+ // We don't need a queue of URLs to send, as only the latest is useful.
+ enum {
+ TARGET_NONE,
+ TARGET_INFLIGHT, // We have a request in-flight, waiting for an ACK
+ TARGET_PENDING // INFLIGHT + we have a URL waiting to be sent
+ } target_url_status_;
+
+ // The URL we show the user in the status bar. We use this to determine if we
+ // want to send a new one (we do not need to send duplicates). It will be
+ // equal to either |mouse_over_url_| or |focus_url_|, depending on which was
+ // updated last.
+ GURL target_url_;
+
+ // The URL the user's mouse is hovering over.
+ GURL mouse_over_url_;
+
+ // The URL that has keyboard focus.
+ GURL focus_url_;
+
+ // The next target URL we want to send to the browser.
+ GURL pending_target_url_;
+
+ // The text selection the last time DidChangeSelection got called. May contain
+ // additional characters before and after the selected text, for IMEs. The
+ // portion of this string that is the actual selected text starts at index
+ // |selection_range_.GetMin() - selection_text_offset_| and has length
+ // |selection_range_.length()|.
+ base::string16 selection_text_;
+ // The offset corresponding to the start of |selection_text_| in the document.
+ size_t selection_text_offset_;
+ // Range over the document corresponding to the actual selected text (which
+ // could correspond to a substring of |selection_text_|; see above).
+ gfx::Range selection_range_;
+
+#if defined(OS_ANDROID)
+ // Cache the old top controls state constraints. Used when updating
+ // current value only without altering the constraints.
+ cc::TopControlsState top_controls_constraints_;
+#endif
+
+ // View ----------------------------------------------------------------------
+
+ // Cache the preferred size of the page in order to prevent sending the IPC
+ // when layout() recomputes but doesn't actually change sizes.
+ gfx::Size preferred_size_;
+
+ // Used to delay determining the preferred size (to avoid intermediate
+ // states for the sizes).
+ base::OneShotTimer<RenderViewImpl> check_preferred_size_timer_;
+
+ // These store the "is main frame is scrolled all the way to the left
+ // or right" state that was last sent to the browser.
+ bool cached_is_main_frame_pinned_to_left_;
+ bool cached_is_main_frame_pinned_to_right_;
+
+ // These store the "has scrollbars" state last sent to the browser.
+ bool cached_has_main_frame_horizontal_scrollbar_;
+ bool cached_has_main_frame_vertical_scrollbar_;
+
+ // Helper objects ------------------------------------------------------------
+
+ scoped_ptr<RenderFrameImpl> main_render_frame_;
+
+ // The next group of objects all implement RenderViewObserver, so are deleted
+ // along with the RenderView automatically. This is why we just store
+ // weak references.
+
+ // Holds a reference to the service which provides desktop notifications.
+ NotificationProvider* notification_provider_;
+
+ // The geolocation dispatcher attached to this view, lazily initialized.
+ GeolocationDispatcher* geolocation_dispatcher_;
+
+ // The speech dispatcher attached to this view, lazily initialized.
+ InputTagSpeechDispatcher* input_tag_speech_dispatcher_;
+
+ // The speech recognition dispatcher attached to this view, lazily
+ // initialized.
+ SpeechRecognitionDispatcher* speech_recognition_dispatcher_;
+
+ // Device orientation dispatcher attached to this view; lazily initialized.
+ DeviceOrientationDispatcher* device_orientation_dispatcher_;
+
+ // MediaStream dispatcher attached to this view; lazily initialized.
+ MediaStreamDispatcher* media_stream_dispatcher_;
+
+ // BrowserPluginManager attached to this view; lazily initialized.
+ scoped_refptr<BrowserPluginManager> browser_plugin_manager_;
+
+ // MediaStreamClient attached to this view; lazily initialized.
+ MediaStreamClient* media_stream_client_;
+ blink::WebUserMediaClient* web_user_media_client_;
+
+ // MidiClient attached to this view; lazily initialized.
+ MidiDispatcher* midi_dispatcher_;
+
+ DevToolsAgent* devtools_agent_;
+
+ // The current accessibility mode.
+ unsigned int accessibility_mode_;
+
+ // Only valid if |accessibility_mode_| is anything other than
+ // AccessibilityModeOff.
+ RendererAccessibility* renderer_accessibility_;
+
+ // Mouse Lock dispatcher attached to this view.
+ MouseLockDispatcher* mouse_lock_dispatcher_;
+
+#if defined(OS_ANDROID)
+ // Android Specific ---------------------------------------------------------
+
+ // The background color of the document body element. This is used as the
+ // default background color for filling the screen areas for which we don't
+ // have the actual content.
+ SkColor body_background_color_;
+
+ // Expected id of the next content intent launched. Used to prevent scheduled
+ // intents to be launched if aborted.
+ size_t expected_content_intent_id_;
+
+ // List of click-based content detectors.
+ typedef std::vector< linked_ptr<ContentDetector> > ContentDetectorList;
+ ContentDetectorList content_detectors_;
+
+ // The media player manager for managing all the media players on this view
+ // for communicating with the real media player objects in browser process.
+ RendererMediaPlayerManager* media_player_manager_;
+
+ // A date/time picker object for date and time related input elements.
+ scoped_ptr<RendererDateTimePicker> date_time_picker_client_;
+#endif
+
+ // Plugins -------------------------------------------------------------------
+
+ // All the currently active plugin delegates for this RenderView; kept so
+ // that we can enumerate them to send updates about things like window
+ // location or tab focus and visibily. These are non-owning references.
+ std::set<WebPluginDelegateProxy*> plugin_delegates_;
+
+#if defined(OS_WIN)
+ // The ID of the focused NPAPI plug-in.
+ int focused_plugin_id_;
+#endif
+
+#if defined(ENABLE_PLUGINS)
+ typedef std::set<PepperPluginInstanceImpl*> PepperPluginSet;
+ PepperPluginSet active_pepper_instances_;
+
+ // TODO(jam): these belong on RenderFrame, once the browser knows which frame
+ // is focused and sends the IPCs which use these to the correct frame. Until
+ // then, we must store these on RenderView as that's the one place that knows
+ // about all the RenderFrames for a page.
+
+ // Whether or not the focus is on a PPAPI plugin
+ PepperPluginInstanceImpl* focused_pepper_plugin_;
+
+ // The plugin instance that received the last mouse event. It is set to NULL
+ // if the last mouse event went to elements other than Pepper plugins.
+ // |pepper_last_mouse_event_target_| is not owned by this class. We depend on
+ // the RenderFrameImpl to NULL it out when it destructs.
+ PepperPluginInstanceImpl* pepper_last_mouse_event_target_;
+#endif
+
+ // Misc ----------------------------------------------------------------------
+
+ // The current and pending file chooser completion objects. If the queue is
+ // nonempty, the first item represents the currently running file chooser
+ // callback, and the remaining elements are the other file chooser completion
+ // still waiting to be run (in order).
+ struct PendingFileChooser;
+ std::deque< linked_ptr<PendingFileChooser> > file_chooser_completions_;
+
+ // The current directory enumeration callback
+ std::map<int, blink::WebFileChooserCompletion*> enumeration_completions_;
+ int enumeration_completion_id_;
+
+ // Reports load progress to the browser.
+ scoped_ptr<LoadProgressTracker> load_progress_tracker_;
+
+ // The SessionStorage namespace that we're assigned to has an ID, and that ID
+ // is passed to us upon creation. WebKit asks for this ID upon first use and
+ // uses it whenever asking the browser process to allocate new storage areas.
+ int64 session_storage_namespace_id_;
+
+ // Stores edit commands associated to the next key event.
+ // Shall be cleared as soon as the next key event is processed.
+ EditCommands edit_commands_;
+
+ // The external popup for the currently showing select popup.
+ scoped_ptr<ExternalPopupMenu> external_popup_menu_;
+
+ // The node that the context menu was pressed over.
+ blink::WebNode context_menu_node_;
+
+ // All the registered observers. We expect this list to be small, so vector
+ // is fine.
+ ObserverList<RenderViewObserver> observers_;
+
+ // Used to inform didChangeSelection() when it is called in the context
+ // of handling a InputMsg_SelectRange IPC.
+ bool handling_select_range_;
+
+ // Wraps the |webwidget_| as a MouseLockDispatcher::LockTarget interface.
+ scoped_ptr<MouseLockDispatcher::LockTarget> webwidget_mouse_lock_target_;
+
+ // State associated with the GetWindowSnapshot function.
+ int next_snapshot_id_;
+ typedef std::map<int, WindowSnapshotCallback> PendingSnapshotMap;
+ PendingSnapshotMap pending_snapshots_;
+
+ // Allows to selectively disable partial buffer swap for this renderer's
+ // compositor.
+ bool allow_partial_swap_;
+
+ // This field stores drag/drop related info for the event that is currently
+ // being handled. If the current event results in starting a drag/drop
+ // session, this info is sent to the browser along with other drag/drop info.
+ DragEventSourceInfo possible_drag_event_info_;
+
+ // NOTE: stats_collection_observer_ should be the last members because their
+ // constructors call the AddObservers method of RenderViewImpl.
+ scoped_ptr<StatsCollectionObserver> stats_collection_observer_;
+
+ // ---------------------------------------------------------------------------
+ // ADDING NEW DATA? Please see if it fits appropriately in one of the above
+ // sections rather than throwing it randomly at the end. If you're adding a
+ // bunch of stuff, you should probably create a helper class and put your
+ // data and methods on that to avoid bloating RenderView more. You can
+ // use the Observer interface to filter IPC messages and receive frame change
+ // notifications.
+ // ---------------------------------------------------------------------------
+
+ DISALLOW_COPY_AND_ASSIGN(RenderViewImpl);
+};
+
+} // namespace content
+
+#endif // CONTENT_RENDERER_RENDER_VIEW_IMPL_H_
« content/renderer/render_frame_impl.cc ('K') | « content/renderer/render_view_browsertest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698