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

Unified Diff: content/browser/frame_host/render_frame_host_impl.cc

Issue 2765443004: AndroidOverlay implementation using Dialog. (Closed)
Patch Set: fixed test Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.h ('k') | content/common/frame_messages.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/frame_host/render_frame_host_impl.cc
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index b6282abb783303809d986e8b4df9d4bff13f412c..aa790519f572be324189d1b841a1312bd199e0ec 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -165,6 +165,12 @@ typedef base::hash_map<RenderFrameHostID, RenderFrameHostImpl*>
base::LazyInstance<RoutingIDFrameMap>::DestructorAtExit g_routing_id_frame_map =
LAZY_INSTANCE_INITIALIZER;
+using TokenFrameMap = base::hash_map<base::UnguessableToken,
+ RenderFrameHostImpl*,
+ base::UnguessableTokenHash>;
+base::LazyInstance<TokenFrameMap>::Leaky g_token_frame_map =
+ LAZY_INSTANCE_INITIALIZER;
+
// Translate a WebKit text direction into a base::i18n one.
base::i18n::TextDirection WebTextDirectionToChromeTextDirection(
blink::WebTextDirection dir) {
@@ -360,6 +366,14 @@ RenderFrameHostImpl* RenderFrameHostImpl::FromAXTreeID(
return RenderFrameHostImpl::FromID(frame_id.first, frame_id.second);
}
+// static
+RenderFrameHostImpl* RenderFrameHostImpl::FromOverlayRoutingToken(
+ const base::UnguessableToken& token) {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ auto it = g_token_frame_map.Get().find(token);
+ return it == g_token_frame_map.Get().end() ? nullptr : it->second;
+}
+
RenderFrameHostImpl::RenderFrameHostImpl(SiteInstance* site_instance,
RenderViewHostImpl* render_view_host,
RenderFrameHostDelegate* delegate,
@@ -465,6 +479,10 @@ RenderFrameHostImpl::~RenderFrameHostImpl() {
GetProcess()->RemoveRoute(routing_id_);
g_routing_id_frame_map.Get().erase(
RenderFrameHostID(GetProcess()->GetID(), routing_id_));
+
+ if (overlay_routing_token_)
+ g_token_frame_map.Get().erase(*overlay_routing_token_);
+
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&NotifyRenderFrameDetachedOnIO,
GetProcess()->GetID(), routing_id_));
@@ -518,6 +536,15 @@ ui::AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::GetAXTreeID() {
GetProcess()->GetID(), routing_id_);
}
+const base::UnguessableToken& RenderFrameHostImpl::GetOverlayRoutingToken() {
+ if (!overlay_routing_token_) {
+ overlay_routing_token_ = base::UnguessableToken::Create();
+ g_token_frame_map.Get().emplace(*overlay_routing_token_, this);
+ }
+
+ return *overlay_routing_token_;
+}
+
SiteInstanceImpl* RenderFrameHostImpl::GetSiteInstance() {
return site_instance_.get();
}
@@ -822,6 +849,8 @@ bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) {
IPC_MESSAGE_HANDLER(FrameHostMsg_NavigationHandledByEmbedder,
OnNavigationHandledByEmbedder)
#endif
+ IPC_MESSAGE_HANDLER(FrameHostMsg_RequestOverlayRoutingToken,
+ OnRequestOverlayRoutingToken)
IPC_MESSAGE_HANDLER(FrameHostMsg_ShowCreatedWindow, OnShowCreatedWindow)
IPC_END_MESSAGE_MAP()
@@ -2474,6 +2503,14 @@ void RenderFrameHostImpl::OnNavigationHandledByEmbedder() {
}
#endif
+void RenderFrameHostImpl::OnRequestOverlayRoutingToken() {
+ // Make sure that we have a token.
+ GetOverlayRoutingToken();
+
+ Send(new FrameMsg_SetOverlayRoutingToken(routing_id_,
+ *overlay_routing_token_));
+}
+
void RenderFrameHostImpl::OnShowCreatedWindow(int pending_widget_routing_id,
WindowOpenDisposition disposition,
const gfx::Rect& initial_rect,
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.h ('k') | content/common/frame_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698