OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 class WebError; | 44 class WebError; |
45 class WebFrame; | 45 class WebFrame; |
46 class WebPluginDelegate; | 46 class WebPluginDelegate; |
47 class WebPluginDelegateProxy; | 47 class WebPluginDelegateProxy; |
48 enum WebRequestCachePolicy; | 48 enum WebRequestCachePolicy; |
49 | 49 |
50 namespace webkit_glue { | 50 namespace webkit_glue { |
51 struct FileUploadData; | 51 struct FileUploadData; |
52 } | 52 } |
53 | 53 |
| 54 // We need to prevent a page from trying to create infinite popups. It is not |
| 55 // as simple as keeping a count of the number of immediate children |
| 56 // popups. Having an html file that window.open()s itself would create |
| 57 // an unlimited chain of RenderViews who only have one RenderView child. |
| 58 // |
| 59 // Therefore, each new top level RenderView creates a new counter and shares it |
| 60 // with all its children and grandchildren popup RenderViews created with |
| 61 // CreateWebView() to have a sort of global limit for the page so no more than |
| 62 // kMaximumNumberOfPopups popups are created. |
| 63 // |
| 64 // This is a RefCounted holder of an int because I can't say |
| 65 // scoped_refptr<int>. |
| 66 typedef base::RefCountedData<int> SharedRenderViewCounter; |
| 67 |
54 // | 68 // |
55 // RenderView is an object that manages a WebView object, and provides a | 69 // RenderView is an object that manages a WebView object, and provides a |
56 // communication interface with an embedding application process | 70 // communication interface with an embedding application process |
57 // | 71 // |
58 class RenderView : public RenderWidget, public WebViewDelegate, | 72 class RenderView : public RenderWidget, public WebViewDelegate, |
59 public webkit_glue::DomSerializerDelegate { | 73 public webkit_glue::DomSerializerDelegate { |
60 public: | 74 public: |
61 // Creates a new RenderView. The parent_hwnd specifies a HWND to use as the | 75 // Creates a new RenderView. The parent_hwnd specifies a HWND to use as the |
62 // parent of the WebView HWND that will be created. The modal_dialog_event | 76 // parent of the WebView HWND that will be created. The modal_dialog_event |
63 // is set by the RenderView whenever a modal dialog alert is shown, so that | 77 // is set by the RenderView whenever a modal dialog alert is shown, so that |
64 // the renderer and plugin processes know to pump window messages. If this | 78 // the renderer and plugin processes know to pump window messages. If this |
65 // is a constrained popup or as a new tab, opener_id is the routing ID of the | 79 // is a constrained popup or as a new tab, opener_id is the routing ID of the |
66 // RenderView responsible for creating this RenderView (corresponding to the | 80 // RenderView responsible for creating this RenderView (corresponding to the |
67 // parent_hwnd). | 81 // parent_hwnd). |counter| is either a currently initialized counter, or NULL |
68 static RenderView* Create(HWND parent_hwnd, | 82 // (in which case we treat this RenderView as a top level window). |
69 HANDLE modal_dialog_event, | 83 static RenderView* Create( |
70 int32 opener_id, | 84 HWND parent_hwnd, |
71 const WebPreferences& webkit_prefs, | 85 HANDLE modal_dialog_event, |
72 int32 routing_id); | 86 int32 opener_id, |
| 87 const WebPreferences& webkit_prefs, |
| 88 SharedRenderViewCounter* counter, |
| 89 int32 routing_id); |
73 | 90 |
74 // Sets the "next page id" counter. | 91 // Sets the "next page id" counter. |
75 static void SetNextPageID(int32 next_page_id); | 92 static void SetNextPageID(int32 next_page_id); |
76 | 93 |
77 // The resource dispatcher used to fetch resources for this view. | 94 // The resource dispatcher used to fetch resources for this view. |
78 ResourceDispatcher* resource_dispatcher() { | 95 ResourceDispatcher* resource_dispatcher() { |
79 return resource_dispatcher_; | 96 return resource_dispatcher_; |
80 } | 97 } |
81 | 98 |
82 // May return NULL when the view is closing. | 99 // May return NULL when the view is closing. |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 // constructor stores that view ID. | 303 // constructor stores that view ID. |
287 explicit RenderView(int32 opener_id); | 304 explicit RenderView(int32 opener_id); |
288 | 305 |
289 // Initializes this view with the given parent and ID. The |routing_id| can be | 306 // Initializes this view with the given parent and ID. The |routing_id| can be |
290 // set to 'MSG_ROUTING_NONE' if the true ID is not yet known. In this case, | 307 // set to 'MSG_ROUTING_NONE' if the true ID is not yet known. In this case, |
291 // CompleteInit must be called later with the true ID. | 308 // CompleteInit must be called later with the true ID. |
292 void Init(HWND parent, | 309 void Init(HWND parent, |
293 HANDLE modal_dialog_event, | 310 HANDLE modal_dialog_event, |
294 int32 opener_id, | 311 int32 opener_id, |
295 const WebPreferences& webkit_prefs, | 312 const WebPreferences& webkit_prefs, |
| 313 SharedRenderViewCounter* counter, |
296 int32 routing_id); | 314 int32 routing_id); |
297 | 315 |
298 void UpdateURL(WebFrame* frame); | 316 void UpdateURL(WebFrame* frame); |
299 void UpdateTitle(WebFrame* frame, const std::wstring& title); | 317 void UpdateTitle(WebFrame* frame, const std::wstring& title); |
300 void UpdateSessionHistory(WebFrame* frame); | 318 void UpdateSessionHistory(WebFrame* frame); |
301 | 319 |
302 // Update current main frame's encoding and send it to browser window. | 320 // Update current main frame's encoding and send it to browser window. |
303 // Since we want to let users see the right encoding info from menu | 321 // Since we want to let users see the right encoding info from menu |
304 // before finishing loading, we call the UpdateEncoding in | 322 // before finishing loading, we call the UpdateEncoding in |
305 // a) function:DidCommitLoadForFrame. When this function is called, | 323 // a) function:DidCommitLoadForFrame. When this function is called, |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
436 void OnThemeChanged(); | 454 void OnThemeChanged(); |
437 | 455 |
438 #ifdef CHROME_PERSONALIZATION | 456 #ifdef CHROME_PERSONALIZATION |
439 void OnPersonalizationEvent(std::string event_name, std::string event_args); | 457 void OnPersonalizationEvent(std::string event_name, std::string event_args); |
440 #endif | 458 #endif |
441 | 459 |
442 // Handles messages posted from automation. | 460 // Handles messages posted from automation. |
443 void OnMessageFromExternalHost(const std::string& target, | 461 void OnMessageFromExternalHost(const std::string& target, |
444 const std::string& message); | 462 const std::string& message); |
445 | 463 |
| 464 // Message that we should no longer be part of the current popup window |
| 465 // grouping, and should form our own grouping. |
| 466 void OnDisassociateFromPopupCount(); |
| 467 |
446 // Switches the frame's CSS media type to "print" and calculate the number of | 468 // Switches the frame's CSS media type to "print" and calculate the number of |
447 // printed pages that are to be expected. |frame| will be used to calculate | 469 // printed pages that are to be expected. |frame| will be used to calculate |
448 // the number of expected pages for this frame only. | 470 // the number of expected pages for this frame only. |
449 int SwitchFrameToPrintMediaType(const ViewMsg_Print_Params& params, | 471 int SwitchFrameToPrintMediaType(const ViewMsg_Print_Params& params, |
450 WebFrame* frame); | 472 WebFrame* frame); |
451 | 473 |
452 // Switches the frame's CSS media type to "display". | 474 // Switches the frame's CSS media type to "display". |
453 void SwitchFrameToDisplayMediaType(WebFrame* frame); | 475 void SwitchFrameToDisplayMediaType(WebFrame* frame); |
454 | 476 |
455 // Prints the page listed in |params|. | 477 // Prints the page listed in |params|. |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
610 | 632 |
611 int history_back_list_count_; | 633 int history_back_list_count_; |
612 int history_forward_list_count_; | 634 int history_forward_list_count_; |
613 | 635 |
614 // True if pop-up blocking is disabled. False by default. | 636 // True if pop-up blocking is disabled. False by default. |
615 bool disable_popup_blocking_; | 637 bool disable_popup_blocking_; |
616 | 638 |
617 // True if the page has any frame-level unload or beforeunload listeners. | 639 // True if the page has any frame-level unload or beforeunload listeners. |
618 bool has_unload_listener_; | 640 bool has_unload_listener_; |
619 | 641 |
| 642 // The total number of unrequested popups that exist and can be followed back |
| 643 // to a common opener. This count is shared among all RenderViews created |
| 644 // with CreateWebView(). All popups are treated as unrequested until |
| 645 // specifically instructed otherwise by the Browser process. |
| 646 scoped_refptr<SharedRenderViewCounter> shared_popup_counter_; |
| 647 |
| 648 // Whether this is a top level window (instead of a popup). Top level windows |
| 649 // shouldn't count against their own |shared_popup_counter_|. |
| 650 bool decrement_shared_popup_at_destruction_; |
| 651 |
620 // Handles accessibility requests into the renderer side, as well as | 652 // Handles accessibility requests into the renderer side, as well as |
621 // maintains the cache and other features of the accessibility tree. | 653 // maintains the cache and other features of the accessibility tree. |
622 scoped_ptr<GlueAccessibility> glue_accessibility_; | 654 scoped_ptr<GlueAccessibility> glue_accessibility_; |
623 | 655 |
624 DISALLOW_COPY_AND_ASSIGN(RenderView); | 656 DISALLOW_COPY_AND_ASSIGN(RenderView); |
625 }; | 657 }; |
626 | 658 |
627 #endif // CHROME_RENDERER_RENDER_VIEW_H_ | 659 #endif // CHROME_RENDERER_RENDER_VIEW_H_ |
OLD | NEW |