OLD | NEW |
---|---|
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_RENDERER_RENDER_VIEW_H_ | 5 #ifndef CHROME_RENDERER_RENDER_VIEW_H_ |
6 #define CHROME_RENDERER_RENDER_VIEW_H_ | 6 #define CHROME_RENDERER_RENDER_VIEW_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 #include <queue> | 9 #include <queue> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/basictypes.h" | 12 #include "base/basictypes.h" |
13 #include "base/file_path.h" | 13 #include "base/file_path.h" |
14 #include "base/gfx/point.h" | 14 #include "base/gfx/point.h" |
15 #include "base/gfx/rect.h" | 15 #include "base/gfx/rect.h" |
16 #include "base/id_map.h" | 16 #include "base/id_map.h" |
17 #include "base/shared_memory.h" | 17 #include "base/shared_memory.h" |
18 #include "base/timer.h" | 18 #include "base/timer.h" |
19 #include "base/values.h" | 19 #include "base/values.h" |
20 #include "base/weak_ptr.h" | |
20 #include "build/build_config.h" | 21 #include "build/build_config.h" |
21 #include "chrome/common/renderer_preferences.h" | 22 #include "chrome/common/renderer_preferences.h" |
22 #include "chrome/common/view_types.h" | 23 #include "chrome/common/view_types.h" |
23 #include "chrome/renderer/automation/dom_automation_controller.h" | 24 #include "chrome/renderer/automation/dom_automation_controller.h" |
24 #include "chrome/renderer/dom_ui_bindings.h" | 25 #include "chrome/renderer/dom_ui_bindings.h" |
25 #include "chrome/renderer/extensions/extension_process_bindings.h" | 26 #include "chrome/renderer/extensions/extension_process_bindings.h" |
26 #include "chrome/renderer/external_host_bindings.h" | 27 #include "chrome/renderer/external_host_bindings.h" |
27 #include "chrome/renderer/render_widget.h" | 28 #include "chrome/renderer/render_widget.h" |
28 #include "third_party/skia/include/core/SkBitmap.h" | 29 #include "third_party/skia/include/core/SkBitmap.h" |
29 #include "testing/gtest/include/gtest/gtest_prod.h" | 30 #include "testing/gtest/include/gtest/gtest_prod.h" |
30 #include "webkit/api/public/WebConsoleMessage.h" | 31 #include "webkit/api/public/WebConsoleMessage.h" |
31 #include "webkit/api/public/WebTextDirection.h" | 32 #include "webkit/api/public/WebTextDirection.h" |
32 #include "webkit/glue/dom_serializer_delegate.h" | 33 #include "webkit/glue/dom_serializer_delegate.h" |
33 #include "webkit/glue/form_data.h" | 34 #include "webkit/glue/form_data.h" |
34 #include "webkit/glue/password_form_dom_manager.h" | 35 #include "webkit/glue/password_form_dom_manager.h" |
35 #include "webkit/glue/webaccessibilitymanager.h" | 36 #include "webkit/glue/webaccessibilitymanager.h" |
37 #include "webkit/glue/webplugin_page_delegate.h" | |
36 #include "webkit/glue/webpreferences.h" | 38 #include "webkit/glue/webpreferences.h" |
37 #include "webkit/glue/webview_delegate.h" | 39 #include "webkit/glue/webview_delegate.h" |
38 #include "webkit/glue/webview.h" | 40 #include "webkit/glue/webview.h" |
39 | 41 |
40 #if defined(OS_WIN) | 42 #if defined(OS_WIN) |
41 // RenderView is a diamond-shaped hierarchy, with WebWidgetClient at the root. | 43 // RenderView is a diamond-shaped hierarchy, with WebWidgetClient at the root. |
42 // VS warns when we inherit the WebWidgetClient method implementations from | 44 // VS warns when we inherit the WebWidgetClient method implementations from |
43 // RenderWidget. It's safe to ignore that warning. | 45 // RenderWidget. It's safe to ignore that warning. |
44 #pragma warning(disable: 4250) | 46 #pragma warning(disable: 4250) |
45 #endif | 47 #endif |
46 | 48 |
47 class AudioMessageFilter; | 49 class AudioMessageFilter; |
48 class DictionaryValue; | 50 class DictionaryValue; |
49 class DevToolsAgent; | 51 class DevToolsAgent; |
50 class DevToolsClient; | 52 class DevToolsClient; |
51 class FilePath; | 53 class FilePath; |
52 class GURL; | 54 class GURL; |
53 class ListValue; | 55 class ListValue; |
54 class NavigationState; | 56 class NavigationState; |
55 class PrintWebViewHelper; | 57 class PrintWebViewHelper; |
56 class WebPluginDelegate; | |
57 class WebPluginDelegateProxy; | 58 class WebPluginDelegateProxy; |
58 class WebDevToolsAgentDelegate; | 59 class WebDevToolsAgentDelegate; |
59 struct ContextMenuMediaParams; | 60 struct ContextMenuMediaParams; |
60 struct ThumbnailScore; | 61 struct ThumbnailScore; |
61 struct ViewMsg_ClosePage_Params; | 62 struct ViewMsg_ClosePage_Params; |
62 struct ViewMsg_Navigate_Params; | 63 struct ViewMsg_Navigate_Params; |
63 struct ViewMsg_UploadFile_Params; | 64 struct ViewMsg_UploadFile_Params; |
64 struct WebDropData; | 65 struct WebDropData; |
65 | 66 |
66 namespace base { | 67 namespace base { |
(...skipping 24 matching lines...) Expand all Loading... | |
91 // This is a RefCounted holder of an int because I can't say | 92 // This is a RefCounted holder of an int because I can't say |
92 // scoped_refptr<int>. | 93 // scoped_refptr<int>. |
93 typedef base::RefCountedData<int> SharedRenderViewCounter; | 94 typedef base::RefCountedData<int> SharedRenderViewCounter; |
94 | 95 |
95 // | 96 // |
96 // RenderView is an object that manages a WebView object, and provides a | 97 // RenderView is an object that manages a WebView object, and provides a |
97 // communication interface with an embedding application process | 98 // communication interface with an embedding application process |
98 // | 99 // |
99 class RenderView : public RenderWidget, | 100 class RenderView : public RenderWidget, |
100 public WebViewDelegate, | 101 public WebViewDelegate, |
101 public webkit_glue::DomSerializerDelegate { | 102 public webkit_glue::WebPluginPageDelegate, |
103 public webkit_glue::DomSerializerDelegate, | |
104 public base::SupportsWeakPtr<RenderView> { | |
102 public: | 105 public: |
103 struct RenderViewSet { | 106 struct RenderViewSet { |
104 std::set<RenderView* > render_view_set_; | 107 std::set<RenderView*> render_view_set_; |
105 }; | 108 }; |
109 | |
106 // Creates a new RenderView. The parent_hwnd specifies a HWND to use as the | 110 // Creates a new RenderView. The parent_hwnd specifies a HWND to use as the |
107 // parent of the WebView HWND that will be created. The modal_dialog_event | 111 // parent of the WebView HWND that will be created. The modal_dialog_event |
108 // is set by the RenderView whenever a modal dialog alert is shown, so that | 112 // is set by the RenderView whenever a modal dialog alert is shown, so that |
109 // the renderer and plugin processes know to pump window messages. If this | 113 // the renderer and plugin processes know to pump window messages. If this |
110 // is a constrained popup or as a new tab, opener_id is the routing ID of the | 114 // is a constrained popup or as a new tab, opener_id is the routing ID of the |
111 // RenderView responsible for creating this RenderView (corresponding to the | 115 // RenderView responsible for creating this RenderView (corresponding to the |
112 // parent_hwnd). |counter| is either a currently initialized counter, or NULL | 116 // parent_hwnd). |counter| is either a currently initialized counter, or NULL |
113 // (in which case we treat this RenderView as a top level window). | 117 // (in which case we treat this RenderView as a top level window). |
114 static RenderView* Create( | 118 static RenderView* Create( |
115 RenderThreadBase* render_thread, | 119 RenderThreadBase* render_thread, |
(...skipping 27 matching lines...) Expand all Loading... | |
143 | 147 |
144 ViewType::Type view_type() { | 148 ViewType::Type view_type() { |
145 return view_type_; | 149 return view_type_; |
146 } | 150 } |
147 | 151 |
148 // IPC::Channel::Listener | 152 // IPC::Channel::Listener |
149 virtual void OnMessageReceived(const IPC::Message& msg); | 153 virtual void OnMessageReceived(const IPC::Message& msg); |
150 | 154 |
151 // WebViewDelegate | 155 // WebViewDelegate |
152 virtual bool CanAcceptLoadDrops() const; | 156 virtual bool CanAcceptLoadDrops() const; |
153 virtual void ShowModalHTMLDialog(const GURL& url, int width, int height, | |
154 const std::string& json_arguments, | |
155 std::string* json_retval); | |
156 virtual void RunJavaScriptAlert(WebKit::WebFrame* webframe, | 157 virtual void RunJavaScriptAlert(WebKit::WebFrame* webframe, |
157 const std::wstring& message); | 158 const std::wstring& message); |
158 virtual bool RunJavaScriptConfirm(WebKit::WebFrame* webframe, | 159 virtual bool RunJavaScriptConfirm(WebKit::WebFrame* webframe, |
159 const std::wstring& message); | 160 const std::wstring& message); |
160 virtual bool RunJavaScriptPrompt(WebKit::WebFrame* webframe, | 161 virtual bool RunJavaScriptPrompt(WebKit::WebFrame* webframe, |
161 const std::wstring& message, | 162 const std::wstring& message, |
162 const std::wstring& default_value, | 163 const std::wstring& default_value, |
163 std::wstring* result); | 164 std::wstring* result); |
164 virtual bool RunBeforeUnloadConfirm(WebKit::WebFrame* webframe, | 165 virtual bool RunBeforeUnloadConfirm(WebKit::WebFrame* webframe, |
165 const std::wstring& message); | 166 const std::wstring& message); |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
256 | 257 |
257 virtual WebView* CreateWebView(WebView* webview, | 258 virtual WebView* CreateWebView(WebView* webview, |
258 bool user_gesture, | 259 bool user_gesture, |
259 const GURL& creator_url); | 260 const GURL& creator_url); |
260 virtual WebKit::WebWidget* CreatePopupWidget( | 261 virtual WebKit::WebWidget* CreatePopupWidget( |
261 WebView* webview, | 262 WebView* webview, |
262 bool activatable); | 263 bool activatable); |
263 virtual WebKit::WebWidget* CreatePopupWidgetWithInfo( | 264 virtual WebKit::WebWidget* CreatePopupWidgetWithInfo( |
264 WebView* webview, | 265 WebView* webview, |
265 const WebKit::WebPopupMenuInfo& info); | 266 const WebKit::WebPopupMenuInfo& info); |
266 virtual WebPluginDelegate* CreatePluginDelegate( | 267 virtual WebKit::WebPlugin* CreatePlugin( |
267 WebView* webview, | 268 WebKit::WebFrame* frame, |
268 const GURL& url, | 269 const WebKit::WebPluginParams& params); |
269 const std::string& mime_type, | |
270 const std::string& clsid, | |
271 std::string* actual_mime_type); | |
272 virtual WebKit::WebWorker* CreateWebWorker(WebKit::WebWorkerClient* client); | 270 virtual WebKit::WebWorker* CreateWebWorker(WebKit::WebWorkerClient* client); |
273 virtual WebKit::WebMediaPlayer* CreateWebMediaPlayer( | 271 virtual WebKit::WebMediaPlayer* CreateWebMediaPlayer( |
274 WebKit::WebMediaPlayerClient* client); | 272 WebKit::WebMediaPlayerClient* client); |
275 virtual void OnMissingPluginStatus(WebPluginDelegate* delegate, int status); | 273 virtual void OnMissingPluginStatus( |
274 WebPluginDelegateProxy* delegate, | |
275 int status); | |
276 virtual void OpenURL(WebView* webview, const GURL& url, | 276 virtual void OpenURL(WebView* webview, const GURL& url, |
277 const GURL& referrer, | 277 const GURL& referrer, |
278 WebKit::WebNavigationPolicy policy); | 278 WebKit::WebNavigationPolicy policy); |
279 virtual void DidDownloadImage(int id, | 279 virtual void DidDownloadImage(int id, |
280 const GURL& image_url, | 280 const GURL& image_url, |
281 bool errored, | 281 bool errored, |
282 const SkBitmap& image); | 282 const SkBitmap& image); |
283 | 283 |
284 virtual void ShowContextMenu(WebView* webview, | 284 virtual void ShowContextMenu(WebView* webview, |
285 ContextNodeType node_type, | 285 ContextNodeType node_type, |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
320 | 320 |
321 virtual void PasteFromSelectionClipboard(); | 321 virtual void PasteFromSelectionClipboard(); |
322 | 322 |
323 virtual void ReportFindInPageMatchCount(int count, int request_id, | 323 virtual void ReportFindInPageMatchCount(int count, int request_id, |
324 bool final_update); | 324 bool final_update); |
325 virtual void ReportFindInPageSelection(int request_id, | 325 virtual void ReportFindInPageSelection(int request_id, |
326 int active_match_ordinal, | 326 int active_match_ordinal, |
327 const WebKit::WebRect& selection); | 327 const WebKit::WebRect& selection); |
328 virtual bool WasOpenedByUserGesture() const; | 328 virtual bool WasOpenedByUserGesture() const; |
329 virtual void FocusAccessibilityObject(WebCore::AccessibilityObject* acc_obj); | 329 virtual void FocusAccessibilityObject(WebCore::AccessibilityObject* acc_obj); |
330 virtual void DidMovePlugin(const WebPluginGeometry& move); | |
331 virtual void CreatedPluginWindow(gfx::PluginWindowHandle handle); | |
332 virtual void WillDestroyPluginWindow(gfx::PluginWindowHandle handle); | |
333 virtual void SpellCheck(const std::wstring& word, int* misspell_location, | 330 virtual void SpellCheck(const std::wstring& word, int* misspell_location, |
334 int* misspell_length); | 331 int* misspell_length); |
335 virtual std::wstring GetAutoCorrectWord(const std::wstring& word); | 332 virtual std::wstring GetAutoCorrectWord(const std::wstring& word); |
336 virtual void SetInputMethodState(bool enabled); | 333 virtual void SetInputMethodState(bool enabled); |
337 virtual void ScriptedPrint(WebKit::WebFrame* frame); | 334 virtual void ScriptedPrint(WebKit::WebFrame* frame); |
338 virtual void UserMetricsRecordAction(const std::wstring& action); | 335 virtual void UserMetricsRecordAction(const std::wstring& action); |
339 virtual void DnsPrefetch(const std::vector<std::string>& host_names); | 336 virtual void DnsPrefetch(const std::vector<std::string>& host_names); |
340 | 337 |
341 // DomSerializerDelegate | |
342 virtual void DidSerializeDataForFrame(const GURL& frame_url, | |
343 const std::string& data, PageSavingSerializationStatus status); | |
344 | |
345 // WebKit::WebWidgetClient | 338 // WebKit::WebWidgetClient |
346 // Most methods are handled by RenderWidget. | 339 // Most methods are handled by RenderWidget. |
347 virtual void show(WebKit::WebNavigationPolicy policy); | 340 virtual void show(WebKit::WebNavigationPolicy policy); |
348 virtual void closeWidgetSoon(); | 341 virtual void closeWidgetSoon(); |
349 virtual void runModal(); | 342 virtual void runModal(); |
350 | 343 |
344 // WebPluginPageDelegate: | |
345 virtual webkit_glue::WebPluginDelegate* CreatePluginDelegate( | |
346 const GURL& url, | |
347 const std::string& mime_type, | |
348 const std::string& clsid, | |
349 std::string* actual_mime_type); | |
350 virtual void CreatedPluginWindow(gfx::PluginWindowHandle handle); | |
351 virtual void WillDestroyPluginWindow(gfx::PluginWindowHandle handle); | |
352 virtual void DidMovePlugin(const webkit_glue::WebPluginGeometry& move); | |
353 virtual void DidStartLoadingForPlugin(); | |
354 virtual void DidStopLoadingForPlugin(); | |
355 virtual void ShowModalHTMLDialogForPlugin( | |
356 const GURL& url, | |
357 const gfx::Size& size, | |
358 const std::string& json_arguments, | |
359 std::string* json_retval); | |
360 | |
361 // DomSerializerDelegate | |
362 virtual void DidSerializeDataForFrame(const GURL& frame_url, | |
363 const std::string& data, PageSavingSerializationStatus status); | |
364 | |
351 // Do not delete directly. This class is reference counted. | 365 // Do not delete directly. This class is reference counted. |
352 virtual ~RenderView(); | 366 virtual ~RenderView(); |
353 | 367 |
354 // Called when a plugin is destroyed. | 368 // Called when a plugin is destroyed. |
355 void PluginDestroyed(WebPluginDelegateProxy* proxy); | 369 //XXX void PluginDestroyed(WebPluginDelegateProxy* proxy); |
jam
2009/09/02 17:06:31
nit: remove
| |
356 | 370 |
357 // Called when a plugin has crashed. | 371 // Called when a plugin has crashed. |
358 void PluginCrashed(base::ProcessId pid, const FilePath& plugin_path); | 372 void PluginCrashed(base::ProcessId pid, const FilePath& plugin_path); |
359 | 373 |
360 // Called from JavaScript window.external.AddSearchProvider() to add a | 374 // Called from JavaScript window.external.AddSearchProvider() to add a |
361 // keyword for a provider described in the given OpenSearch document. | 375 // keyword for a provider described in the given OpenSearch document. |
362 void AddSearchProvider(const std::string& url); | 376 void AddSearchProvider(const std::string& url); |
363 | 377 |
364 // Asks the browser for the CPBrowsingContext associated with this renderer. | 378 // Asks the browser for the CPBrowsingContext associated with this renderer. |
365 uint32 GetCPBrowsingContext(); | 379 uint32 GetCPBrowsingContext(); |
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
747 GURL alternate_error_page_url_; | 761 GURL alternate_error_page_url_; |
748 | 762 |
749 // The pending file upload. | 763 // The pending file upload. |
750 scoped_ptr<webkit_glue::FileUploadData> pending_upload_data_; | 764 scoped_ptr<webkit_glue::FileUploadData> pending_upload_data_; |
751 | 765 |
752 ScopedRunnableMethodFactory<RenderView> method_factory_; | 766 ScopedRunnableMethodFactory<RenderView> method_factory_; |
753 | 767 |
754 // Timer used to delay the updating of nav state (see SyncNavigationState). | 768 // Timer used to delay the updating of nav state (see SyncNavigationState). |
755 base::OneShotTimer<RenderView> nav_state_sync_timer_; | 769 base::OneShotTimer<RenderView> nav_state_sync_timer_; |
756 | 770 |
757 typedef std::vector<WebPluginDelegateProxy*> PluginDelegateList; | |
758 PluginDelegateList plugin_delegates_; | |
759 | |
760 // Remember the first uninstalled plugin, so that we can ask the plugin | 771 // Remember the first uninstalled plugin, so that we can ask the plugin |
761 // to install itself when user clicks on the info bar. | 772 // to install itself when user clicks on the info bar. |
762 WebPluginDelegate* first_default_plugin_; | 773 base::WeakPtr<webkit_glue::WebPluginDelegate> first_default_plugin_; |
763 | 774 |
764 // If the browser hasn't sent us an ACK for the last FindReply we sent | 775 // If the browser hasn't sent us an ACK for the last FindReply we sent |
765 // to it, then we need to queue up the message (keeping only the most | 776 // to it, then we need to queue up the message (keeping only the most |
766 // recent message if new ones come in). | 777 // recent message if new ones come in). |
767 scoped_ptr<IPC::Message> queued_find_reply_message_; | 778 scoped_ptr<IPC::Message> queued_find_reply_message_; |
768 | 779 |
769 // Handle to an event that's set when the page is showing a modal dialog (or | 780 // Handle to an event that's set when the page is showing a modal dialog (or |
770 // equivalent constrained window). The renderer and any plugin processes | 781 // equivalent constrained window). The renderer and any plugin processes |
771 // check this to know if they should pump messages/tasks then. | 782 // check this to know if they should pump messages/tasks then. |
772 scoped_ptr<base::WaitableEvent> modal_dialog_event_; | 783 scoped_ptr<base::WaitableEvent> modal_dialog_event_; |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
867 // page id for the last navigation sent to the browser. | 878 // page id for the last navigation sent to the browser. |
868 int32 last_top_level_navigation_page_id_; | 879 int32 last_top_level_navigation_page_id_; |
869 | 880 |
870 // The settings this render view initialized WebKit with. | 881 // The settings this render view initialized WebKit with. |
871 WebPreferences webkit_preferences_; | 882 WebPreferences webkit_preferences_; |
872 | 883 |
873 DISALLOW_COPY_AND_ASSIGN(RenderView); | 884 DISALLOW_COPY_AND_ASSIGN(RenderView); |
874 }; | 885 }; |
875 | 886 |
876 #endif // CHROME_RENDERER_RENDER_VIEW_H_ | 887 #endif // CHROME_RENDERER_RENDER_VIEW_H_ |
OLD | NEW |