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

Side by Side Diff: content/renderer/render_view_impl.h

Issue 10827078: Support frame tree propagation between renderers in the same browsing instance. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Another round of fixes based on Charlie's review. Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 CONTENT_RENDERER_RENDER_VIEW_IMPL_H_ 5 #ifndef CONTENT_RENDERER_RENDER_VIEW_IMPL_H_
6 #define CONTENT_RENDERER_RENDER_VIEW_IMPL_H_ 6 #define CONTENT_RENDERER_RENDER_VIEW_IMPL_H_
7 7
8 #include <deque> 8 #include <deque>
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
11 #include <string> 11 #include <string>
12 #include <vector> 12 #include <vector>
13 13
14 #include "base/basictypes.h" 14 #include "base/basictypes.h"
15 #include "base/gtest_prod_util.h" 15 #include "base/gtest_prod_util.h"
16 #include "base/id_map.h" 16 #include "base/id_map.h"
17 #include "base/memory/linked_ptr.h" 17 #include "base/memory/linked_ptr.h"
18 #include "base/memory/weak_ptr.h" 18 #include "base/memory/weak_ptr.h"
19 #include "base/observer_list.h" 19 #include "base/observer_list.h"
20 #include "base/timer.h" 20 #include "base/timer.h"
21 #include "base/values.h"
21 #include "build/build_config.h" 22 #include "build/build_config.h"
22 #include "content/common/content_export.h" 23 #include "content/common/content_export.h"
23 #include "content/common/edit_command.h" 24 #include "content/common/edit_command.h"
24 #include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h" 25 #include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h"
25 #include "content/common/navigation_gesture.h" 26 #include "content/common/navigation_gesture.h"
26 #include "content/common/view_message_enums.h" 27 #include "content/common/view_message_enums.h"
27 #include "content/public/common/javascript_message_type.h" 28 #include "content/public/common/javascript_message_type.h"
28 #include "content/public/common/page_zoom.h" 29 #include "content/public/common/page_zoom.h"
29 #include "content/public/common/referrer.h" 30 #include "content/public/common/referrer.h"
30 #include "content/public/common/renderer_preferences.h" 31 #include "content/public/common/renderer_preferences.h"
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 WebKit::WebFrame* frame, 536 WebKit::WebFrame* frame,
536 WebKit::WebMediaPlayerClient* client); 537 WebKit::WebMediaPlayerClient* client);
537 virtual WebKit::WebMediaPlayer* createMediaPlayer( 538 virtual WebKit::WebMediaPlayer* createMediaPlayer(
538 WebKit::WebFrame* frame, 539 WebKit::WebFrame* frame,
539 const WebKit::WebURL& url, 540 const WebKit::WebURL& url,
540 WebKit::WebMediaPlayerClient* client); 541 WebKit::WebMediaPlayerClient* client);
541 virtual WebKit::WebApplicationCacheHost* createApplicationCacheHost( 542 virtual WebKit::WebApplicationCacheHost* createApplicationCacheHost(
542 WebKit::WebFrame* frame, 543 WebKit::WebFrame* frame,
543 WebKit::WebApplicationCacheHostClient* client); 544 WebKit::WebApplicationCacheHostClient* client);
544 virtual WebKit::WebCookieJar* cookieJar(WebKit::WebFrame* frame); 545 virtual WebKit::WebCookieJar* cookieJar(WebKit::WebFrame* frame);
546 virtual void didCreateFrame(WebKit::WebFrame* parent,
547 WebKit::WebFrame* child);
545 virtual void frameDetached(WebKit::WebFrame* frame); 548 virtual void frameDetached(WebKit::WebFrame* frame);
546 virtual void willClose(WebKit::WebFrame* frame); 549 virtual void willClose(WebKit::WebFrame* frame);
547 virtual void loadURLExternally(WebKit::WebFrame* frame, 550 virtual void loadURLExternally(WebKit::WebFrame* frame,
548 const WebKit::WebURLRequest& request, 551 const WebKit::WebURLRequest& request,
549 WebKit::WebNavigationPolicy policy); 552 WebKit::WebNavigationPolicy policy);
550 virtual void loadURLExternally(WebKit::WebFrame* frame, 553 virtual void loadURLExternally(WebKit::WebFrame* frame,
551 const WebKit::WebURLRequest& request, 554 const WebKit::WebURLRequest& request,
552 WebKit::WebNavigationPolicy policy, 555 WebKit::WebNavigationPolicy policy,
553 const WebKit::WebString& suggested_name); 556 const WebKit::WebString& suggested_name);
554 virtual WebKit::WebNavigationPolicy decidePolicyForNavigation( 557 virtual WebKit::WebNavigationPolicy decidePolicyForNavigation(
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 unsigned long long requested_size, 676 unsigned long long requested_size,
674 WebKit::WebStorageQuotaCallbacks* callbacks); 677 WebKit::WebStorageQuotaCallbacks* callbacks);
675 virtual void registerIntentService( 678 virtual void registerIntentService(
676 WebKit::WebFrame* frame, 679 WebKit::WebFrame* frame,
677 const WebKit::WebIntentServiceInfo& service); 680 const WebKit::WebIntentServiceInfo& service);
678 virtual void dispatchIntent(WebKit::WebFrame* frame, 681 virtual void dispatchIntent(WebKit::WebFrame* frame,
679 const WebKit::WebIntentRequest& intentRequest); 682 const WebKit::WebIntentRequest& intentRequest);
680 virtual void willOpenSocketStream( 683 virtual void willOpenSocketStream(
681 WebKit::WebSocketStreamHandle* handle); 684 WebKit::WebSocketStreamHandle* handle);
682 virtual bool willCheckAndDispatchMessageEvent( 685 virtual bool willCheckAndDispatchMessageEvent(
683 WebKit::WebFrame* source, 686 WebKit::WebFrame* sourceFrame,
687 WebKit::WebFrame* targetFrame,
684 WebKit::WebSecurityOrigin targetOrigin, 688 WebKit::WebSecurityOrigin targetOrigin,
685 WebKit::WebDOMMessageEvent event) OVERRIDE; 689 WebKit::WebDOMMessageEvent event) OVERRIDE;
686 virtual WebKit::WebString userAgentOverride( 690 virtual WebKit::WebString userAgentOverride(
687 WebKit::WebFrame* frame, 691 WebKit::WebFrame* frame,
688 const WebKit::WebURL& url) OVERRIDE; 692 const WebKit::WebURL& url) OVERRIDE;
689 693
690 // WebKit::WebPageSerializerClient implementation ---------------------------- 694 // WebKit::WebPageSerializerClient implementation ----------------------------
691 695
692 virtual void didSerializeDataForFrame( 696 virtual void didSerializeDataForFrame(
693 const WebKit::WebURL& frame_url, 697 const WebKit::WebURL& frame_url,
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
1036 #endif 1040 #endif
1037 1041
1038 void OnZoom(content::PageZoom zoom); 1042 void OnZoom(content::PageZoom zoom);
1039 void OnZoomFactor(content::PageZoom zoom, int zoom_center_x, 1043 void OnZoomFactor(content::PageZoom zoom, int zoom_center_x,
1040 int zoom_center_y); 1044 int zoom_center_y);
1041 1045
1042 void OnEnableViewSourceMode(); 1046 void OnEnableViewSourceMode();
1043 1047
1044 void OnJavaBridgeInit(); 1048 void OnJavaBridgeInit();
1045 1049
1050 void OnUpdatedFrameTree(int process_id,
1051 int route_id,
1052 const std::string& frame_tree);
1053
1046 // Adding a new message handler? Please add it in alphabetical order above 1054 // Adding a new message handler? Please add it in alphabetical order above
1047 // and put it in the same position in the .cc file. 1055 // and put it in the same position in the .cc file.
1048 1056
1049 // Misc private functions ---------------------------------------------------- 1057 // Misc private functions ----------------------------------------------------
1050 void ZoomFactorHelper(content::PageZoom zoom, int zoom_center_x, 1058 void ZoomFactorHelper(content::PageZoom zoom, int zoom_center_x,
1051 int zoom_center_y, float scaling_increment); 1059 int zoom_center_y, float scaling_increment);
1052 1060
1053 void AltErrorPageFinished(WebKit::WebFrame* frame, 1061 void AltErrorPageFinished(WebKit::WebFrame* frame,
1054 const WebKit::WebURLError& original_error, 1062 const WebKit::WebURLError& original_error,
1055 const std::string& html); 1063 const std::string& html);
1056 1064
1057 // Check whether the preferred size has changed. 1065 // Check whether the preferred size has changed.
1058 void CheckPreferredSize(); 1066 void CheckPreferredSize();
1059 1067
1060 WebKit::WebGraphicsContext3D* CreateGraphicsContext3D( 1068 WebKit::WebGraphicsContext3D* CreateGraphicsContext3D(
1061 const WebKit::WebGraphicsContext3D::Attributes& attributes); 1069 const WebKit::WebGraphicsContext3D::Attributes& attributes);
1062 1070
1071 // This method walks the entire frame tree for this RenderView and sends an
1072 // update to the browser process as described in the
1073 // ViewHostMsg_FrameTreeUpdated comments. If |exclude_frame_subtree|
1074 // frame is non-NULL, the subtree starting at that frame not included in the
1075 // serialized form.
1076 // This is used when a frame is going to be removed from the tree.
1077 void SendUpdatedFrameTree(WebKit::WebFrame* exclude_frame_subtree);
1078
1079 // Recursively creates a DOM frame tree starting with |frame|, based on
1080 // |frame_tree|. For each node, the frame is navigated to the swapped out URL,
1081 // the name (if present) is set on it, and all the subframes are created
1082 // and added to the DOM.
1083 void CreateFrameTree(WebKit::WebFrame* frame, DictionaryValue* frame_tree);
1084
1085 // If this is a swapped out RenderView, which maintains a copy of the frame
1086 // tree of an active RenderView, we keep a map from frame ids in this view to
1087 // the frame ids of the active view for each corresponding frame.
1088 // This method uses the map to find the frame in this RenderView that
1089 // corresponds to the frame in the active RenderView specified by |frame_id|.
1090 WebKit::WebFrame* GetFrameByMappedID(int frame_id);
1091
1063 void EnsureMediaStreamImpl(); 1092 void EnsureMediaStreamImpl();
1064 1093
1065 // This callback is triggered when DownloadFavicon completes, either 1094 // This callback is triggered when DownloadFavicon completes, either
1066 // succesfully or with a failure. See DownloadFavicon for more 1095 // succesfully or with a failure. See DownloadFavicon for more
1067 // details. 1096 // details.
1068 void DidDownloadFavicon(webkit_glue::ImageResourceFetcher* fetcher, 1097 void DidDownloadFavicon(webkit_glue::ImageResourceFetcher* fetcher,
1069 const SkBitmap& image); 1098 const SkBitmap& image);
1070 1099
1071 // Requests to download a favicon image. When done, the RenderView is notified 1100 // Requests to download a favicon image. When done, the RenderView is notified
1072 // by way of DidDownloadFavicon. Returns true if the request was successfully 1101 // by way of DidDownloadFavicon. Returns true if the request was successfully
(...skipping 28 matching lines...) Expand all
1101 #if defined(OS_ANDROID) 1130 #if defined(OS_ANDROID)
1102 // Launch an Android content intent with the given URL. 1131 // Launch an Android content intent with the given URL.
1103 void LaunchAndroidContentIntent(const GURL& intent_url, size_t request_id); 1132 void LaunchAndroidContentIntent(const GURL& intent_url, size_t request_id);
1104 #endif 1133 #endif
1105 1134
1106 bool MaybeLoadAlternateErrorPage(WebKit::WebFrame* frame, 1135 bool MaybeLoadAlternateErrorPage(WebKit::WebFrame* frame,
1107 const WebKit::WebURLError& error, 1136 const WebKit::WebURLError& error,
1108 bool replace); 1137 bool replace);
1109 1138
1110 // Make this RenderView show an empty, unscriptable page. 1139 // Make this RenderView show an empty, unscriptable page.
1111 void NavigateToSwappedOutURL(); 1140 void NavigateToSwappedOutURL(WebKit::WebFrame* frame);
1112 1141
1113 // If we initiated a navigation, this function will populate |document_state| 1142 // If we initiated a navigation, this function will populate |document_state|
1114 // with the navigation information saved in OnNavigate(). 1143 // with the navigation information saved in OnNavigate().
1115 void PopulateDocumentStateFromPending(content::DocumentState* document_state); 1144 void PopulateDocumentStateFromPending(content::DocumentState* document_state);
1116 1145
1117 // Returns a new NavigationState populated with the navigation information 1146 // Returns a new NavigationState populated with the navigation information
1118 // saved in OnNavigate(). 1147 // saved in OnNavigate().
1119 content::NavigationState* CreateNavigationStateFromPending(); 1148 content::NavigationState* CreateNavigationStateFromPending();
1120 1149
1121 // Processes the command-line flags --enable-viewport and 1150 // Processes the command-line flags --enable-viewport and
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
1465 // guest RenderView. 1494 // guest RenderView.
1466 ppapi::HostResource guest_graphics_resource_; 1495 ppapi::HostResource guest_graphics_resource_;
1467 1496
1468 // This graphics context is initialized once GuestReady() is called. 1497 // This graphics context is initialized once GuestReady() is called.
1469 WebGraphicsContext3DCommandBufferImpl* guest_uninitialized_context_; 1498 WebGraphicsContext3DCommandBufferImpl* guest_uninitialized_context_;
1470 1499
1471 // These are the attributes originally passed into createOutputSurface 1500 // These are the attributes originally passed into createOutputSurface
1472 // before the guest_to_embedder_channel was ready. 1501 // before the guest_to_embedder_channel was ready.
1473 WebKit::WebGraphicsContext3D::Attributes guest_attributes_; 1502 WebKit::WebGraphicsContext3D::Attributes guest_attributes_;
1474 1503
1504 // Boolean indicating whether we are in the process of creating the frame
1505 // tree for this renderer in response to ViewMsg_UpdateFrameTree. If true,
1506 // we won't be sending ViewHostMsg_FrameTreeUpdated messages back to the
1507 // browser, as those will be redundant.
1508 bool updating_frame_tree_;
1509
1510 // Boolean indicating that the frame tree has changed, but a message has not
1511 // been sent to the browser because a page has been loading. This helps
1512 // avoid extra messages being sent to the browser when navigating away from a
1513 // page with subframes, which will be destroyed. Instead, a single message
1514 // is sent when the load is stopped with the final state of the frame tree.
1515 //
1516 // TODO(nasko): Relying on the is_loading_ means that frame tree updates will
1517 // not be sent until *all* subframes have completed loading. This can cause
1518 // JavaScript calls to fail, if they occur prior to the first update message
1519 // being sent. This will be fixed by bug http://crbug.com/145014.
1520 bool pending_frame_tree_update_;
1521
1522 // If this render view is a swapped out "mirror" of an active render view in a
1523 // different process, we record the process id and route id for the active RV.
1524 // For further details, see the comments on ViewHostMsg_FrameTreeUpdated.
1525 int target_process_id_;
1526 int target_routing_id_;
1527
1528 // A map of the current process's frame ids to ids in the remote active render
1529 // view, if this is a swapped out render view.
1530 std::map<int, int> active_frame_id_map_;
1531
1475 // NOTE: pepper_delegate_ should be last member because its constructor calls 1532 // NOTE: pepper_delegate_ should be last member because its constructor calls
1476 // AddObservers method of RenderViewImpl from c-tor. 1533 // AddObservers method of RenderViewImpl from c-tor.
1477 content::PepperPluginDelegateImpl pepper_delegate_; 1534 content::PepperPluginDelegateImpl pepper_delegate_;
1478 1535
1479 // --------------------------------------------------------------------------- 1536 // ---------------------------------------------------------------------------
1480 // ADDING NEW DATA? Please see if it fits appropriately in one of the above 1537 // ADDING NEW DATA? Please see if it fits appropriately in one of the above
1481 // sections rather than throwing it randomly at the end. If you're adding a 1538 // sections rather than throwing it randomly at the end. If you're adding a
1482 // bunch of stuff, you should probably create a helper class and put your 1539 // bunch of stuff, you should probably create a helper class and put your
1483 // data and methods on that to avoid bloating RenderView more. You can 1540 // data and methods on that to avoid bloating RenderView more. You can
1484 // use the Observer interface to filter IPC messages and receive frame change 1541 // use the Observer interface to filter IPC messages and receive frame change
1485 // notifications. 1542 // notifications.
1486 // --------------------------------------------------------------------------- 1543 // ---------------------------------------------------------------------------
1487 1544
1488 DISALLOW_COPY_AND_ASSIGN(RenderViewImpl); 1545 DISALLOW_COPY_AND_ASSIGN(RenderViewImpl);
1489 }; 1546 };
1490 1547
1491 #endif // CONTENT_RENDERER_RENDER_VIEW_IMPL_H_ 1548 #endif // CONTENT_RENDERER_RENDER_VIEW_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698