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

Unified Diff: content/browser/renderer_host/render_view_host.cc

Issue 8760024: Cross-process postMessage (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: New patch, still not quite done Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/render_view_host.cc
diff --git a/content/browser/renderer_host/render_view_host.cc b/content/browser/renderer_host/render_view_host.cc
index ab0ce6d23f64f9ee510787c6bb60f74f9ec52da2..3eac6072e4284561ccae9ab8990467a2028b3762 100644
--- a/content/browser/renderer_host/render_view_host.cc
+++ b/content/browser/renderer_host/render_view_host.cc
@@ -19,8 +19,10 @@
#include "base/values.h"
#include "content/browser/browser_context.h"
#include "content/browser/browser_message_filter.h"
+#include "content/browser/browsing_instance_frame_id.h"
#include "content/browser/child_process_security_policy.h"
#include "content/browser/cross_site_request_manager.h"
+#include "content/browser/frame_map.h"
#include "content/browser/host_zoom_map.h"
#include "content/browser/in_process_webkit/session_storage_namespace.h"
#include "content/browser/power_save_blocker.h"
@@ -261,6 +263,7 @@ void RenderViewHost::NavigateToURL(const GURL& url) {
params.url = url;
params.transition = content::PAGE_TRANSITION_LINK;
params.navigation_type = ViewMsg_Navigate_Type::NORMAL;
+ params.opener_browsing_instance_frame_id = -1;
Navigate(params);
}
@@ -331,11 +334,20 @@ void RenderViewHost::SwapOut(int new_render_process_host_id,
// Start the hang monitor in case the renderer hangs in the unload handler.
StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS));
+ content::FrameMap& frame_mapper =
+ process()->GetBrowserContext()->frame_mapper();
+ content::BrowsingInstanceFrame* topLevelFrame =
+ frame_mapper.FindTopLevelFrameByProcessAndRoute(process()->GetID(),
+ routing_id());
+ DCHECK(topLevelFrame);
+
ViewMsg_SwapOut_Params params;
params.closing_process_id = process()->GetID();
params.closing_route_id = routing_id();
params.new_render_process_host_id = new_render_process_host_id;
params.new_request_id = new_request_id;
+ params.browsing_instance_frame_id = topLevelFrame->id();
+
if (IsRenderViewLive()) {
Send(new ViewMsg_SwapOut(routing_id(), params));
} else {
@@ -1007,16 +1019,31 @@ void RenderViewHost::OnMsgToggleFullscreen(bool enter_fullscreen) {
delegate_->ToggleFullscreenMode(enter_fullscreen);
}
-void RenderViewHost::OnMsgOpenURL(const GURL& url,
- const content::Referrer& referrer,
- WindowOpenDisposition disposition,
- int64 source_frame_id) {
- GURL validated_url(url);
+void RenderViewHost::OnMsgOpenURL(const ViewHostMsg_OpenURL_Params& params) {
+ GURL validated_url(params.url);
FilterURL(ChildProcessSecurityPolicy::GetInstance(),
process()->GetID(), &validated_url);
- delegate_->RequestOpenURL(
- validated_url, referrer, disposition, source_frame_id);
+ // Translate the RenderView's opener_frame_id to browsing instance frame id
+ int64 opener_browsing_instance_frame_id = -1;
+ DLOG(WARNING) << "OnMsgOpenURL, opener_frame_id = " << params.opener_frame_id;
+ if (params.opener_frame_id) {
+ DLOG(WARNING) << "Mapping opener_frame_id " << params.opener_frame_id;
+ DLOG(WARNING) << "Process = " << process()->GetID();
+ content::FrameMap& frame_mapper =
+ process()->GetBrowserContext()->frame_mapper();
+ content::BrowsingInstanceFrame* opener = frame_mapper.FindByWebKitId(
+ process()->GetID(), params.opener_frame_id);
+ if (opener) {
+ DLOG(WARNING) << "Opener is " << opener->id();
+ opener_browsing_instance_frame_id = opener->id();
+ } else {
+ DLOG(WARNING) << "Opener not found";
+ }
+ }
+ delegate_->RequestOpenURL(validated_url, params.referrer,
+ params.disposition, params.source_frame_id,
+ opener_browsing_instance_frame_id);
}
void RenderViewHost::OnMsgDidContentsPreferredSizeChange(

Powered by Google App Engine
This is Rietveld 408576698