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_ |