| 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 a3ca625f6be8be46a6a09a51b3efd5ff4d2094bb..97a5cd0c10a6342930069a16f7f4c8d87040c2c0 100644
|
| --- a/content/browser/frame_host/render_frame_host_impl.cc
|
| +++ b/content/browser/frame_host/render_frame_host_impl.cc
|
| @@ -161,6 +161,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,
|
| + 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) {
|
| @@ -356,6 +365,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_.has_value())
|
| + g_token_frame_map.Get().erase(overlay_routing_token_.value());
|
| +#endif
|
| BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
|
| base::Bind(&NotifyRenderFrameDetachedOnIO,
|
| GetProcess()->GetID(), routing_id_));
|
| @@ -514,6 +537,18 @@ ui::AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::GetAXTreeID() {
|
| GetProcess()->GetID(), routing_id_);
|
| }
|
|
|
| +#if defined(OS_ANDROID)
|
| +const base::UnguessableToken& RenderFrameHostImpl::GetOverlayRoutingToken() {
|
| + if (!overlay_routing_token_.has_value()) {
|
| + overlay_routing_token_ = base::UnguessableToken::Create();
|
| + g_token_frame_map.Get().insert(
|
| + std::make_pair(overlay_routing_token_.value(), this));
|
| + }
|
| +
|
| + return overlay_routing_token_.value();
|
| +}
|
| +#endif
|
| +
|
| SiteInstanceImpl* RenderFrameHostImpl::GetSiteInstance() {
|
| return site_instance_.get();
|
| }
|
| @@ -821,6 +856,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()
|
| @@ -2434,6 +2471,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_.value()));
|
| +}
|
| #endif
|
|
|
| void RenderFrameHostImpl::OnShowCreatedWindow(int pending_widget_routing_id,
|
|
|