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

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

Issue 2765443004: AndroidOverlay implementation using Dialog. (Closed)
Patch Set: rebased onto gpu_surface_tracker 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
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 b730c3ceb69613d7a01279273b6cfe417b43273a..6eb600384f2f0a5c2f313ee7b3f7d6be569ae36f 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -162,6 +162,15 @@ typedef base::hash_map<RenderFrameHostID, RenderFrameHostImpl*>
base::LazyInstance<RoutingIDFrameMap>::DestructorAtExit g_routing_id_frame_map =
LAZY_INSTANCE_INITIALIZER;
+#if defined(OS_ANDROID)
+typedef base::hash_map<base::UnguessableToken,
boliu 2017/04/22 00:22:43 nit: c++11 "using" syntax
liberato (no reviews please) 2017/04/24 22:19:41 Done.
+ RenderFrameHostImpl*,
+ base::UnguessableTokenHash>
+ TokenFrameMap;
+base::LazyInstance<TokenFrameMap>::Leaky g_token_frame_map =
+ LAZY_INSTANCE_INITIALIZER;
+#endif
+
// Translate a WebKit text direction into a base::i18n one.
base::i18n::TextDirection WebTextDirectionToChromeTextDirection(
blink::WebTextDirection dir) {
@@ -357,6 +366,16 @@ RenderFrameHostImpl* RenderFrameHostImpl::FromAXTreeID(
return RenderFrameHostImpl::FromID(frame_id.first, frame_id.second);
}
+#if defined(OS_ANDROID)
+// 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;
+}
+#endif
+
RenderFrameHostImpl::RenderFrameHostImpl(SiteInstance* site_instance,
RenderViewHostImpl* render_view_host,
RenderFrameHostDelegate* delegate,
@@ -461,6 +480,10 @@ RenderFrameHostImpl::~RenderFrameHostImpl() {
GetProcess()->RemoveRoute(routing_id_);
g_routing_id_frame_map.Get().erase(
RenderFrameHostID(GetProcess()->GetID(), routing_id_));
+#if defined(OS_ANDROID)
+ if (overlay_routing_token_)
+ g_token_frame_map.Get().erase(*overlay_routing_token_);
+#endif
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&NotifyRenderFrameDetachedOnIO,
GetProcess()->GetID(), routing_id_));
@@ -514,6 +537,17 @@ ui::AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::GetAXTreeID() {
GetProcess()->GetID(), routing_id_);
}
+#if defined(OS_ANDROID)
+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_;
+}
+#endif
+
SiteInstanceImpl* RenderFrameHostImpl::GetSiteInstance() {
return site_instance_.get();
}
@@ -818,6 +852,8 @@ bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) {
#if defined(OS_ANDROID)
IPC_MESSAGE_HANDLER(FrameHostMsg_NavigationHandledByEmbedder,
OnNavigationHandledByEmbedder)
+ IPC_MESSAGE_HANDLER(FrameHostMsg_RequestOverlayRoutingToken,
+ OnRequestOverlayRoutingToken)
#endif
IPC_MESSAGE_HANDLER(FrameHostMsg_ShowCreatedWindow, OnShowCreatedWindow)
IPC_END_MESSAGE_MAP()
@@ -2449,6 +2485,14 @@ void RenderFrameHostImpl::OnNavigationHandledByEmbedder() {
OnDidStopLoading();
}
+
+void RenderFrameHostImpl::OnRequestOverlayRoutingToken() {
+ // Make sure that we have a token.
+ GetOverlayRoutingToken();
+
+ Send(new FrameMsg_SetOverlayRoutingToken(routing_id_,
+ *overlay_routing_token_));
+}
#endif
void RenderFrameHostImpl::OnShowCreatedWindow(int pending_widget_routing_id,

Powered by Google App Engine
This is Rietveld 408576698