diff options
author | creis@chromium.org <creis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-03 21:29:35 +0000 |
---|---|---|
committer | creis@chromium.org <creis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-03 21:29:35 +0000 |
commit | 79a702895e17d13056da5454830de5a9244b4f04 (patch) | |
tree | 1a4a145eceb46ddf7566dd62b6e359767ec687e3 /content | |
parent | 45172e6e478a359eba9c05bc72dd0b4c241a65c8 (diff) | |
download | chromium_src-79a702895e17d13056da5454830de5a9244b4f04.zip chromium_src-79a702895e17d13056da5454830de5a9244b4f04.tar.gz chromium_src-79a702895e17d13056da5454830de5a9244b4f04.tar.bz2 |
Update resource requests to remove redundant frame ID.
BUG=314791
TEST=No behavior change.
R=battre@chromium.org, nasko@chromium.org
TBR=dcheng@chromium.org, jochen@chromium.org
Review URL: https://codereview.chromium.org/184873004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@254566 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/browser/loader/cross_site_resource_handler.cc | 14 | ||||
-rw-r--r-- | content/browser/loader/resource_dispatcher_host_impl.cc | 10 | ||||
-rw-r--r-- | content/browser/loader/resource_dispatcher_host_unittest.cc | 3 | ||||
-rw-r--r-- | content/browser/loader/resource_request_info_impl.cc | 22 | ||||
-rw-r--r-- | content/browser/loader/resource_request_info_impl.h | 12 | ||||
-rw-r--r-- | content/browser/loader/resource_scheduler_unittest.cc | 3 | ||||
-rw-r--r-- | content/browser/renderer_host/render_view_host_impl.h | 1 | ||||
-rw-r--r-- | content/child/npapi/plugin_url_fetcher.cc | 1 | ||||
-rw-r--r-- | content/child/request_extra_data.cc | 6 | ||||
-rw-r--r-- | content/child/request_extra_data.h | 9 | ||||
-rw-r--r-- | content/child/resource_dispatcher.cc | 6 | ||||
-rw-r--r-- | content/child/resource_dispatcher_unittest.cc | 2 | ||||
-rw-r--r-- | content/common/resource_messages.h | 8 | ||||
-rw-r--r-- | content/public/browser/resource_request_details.cc | 6 | ||||
-rw-r--r-- | content/public/browser/resource_request_details.h | 2 | ||||
-rw-r--r-- | content/public/browser/resource_request_info.h | 11 | ||||
-rw-r--r-- | content/renderer/render_frame_impl.cc | 8 |
17 files changed, 45 insertions, 79 deletions
diff --git a/content/browser/loader/cross_site_resource_handler.cc b/content/browser/loader/cross_site_resource_handler.cc index 2ed007a..c958ba5 100644 --- a/content/browser/loader/cross_site_resource_handler.cc +++ b/content/browser/loader/cross_site_resource_handler.cc @@ -43,7 +43,7 @@ struct CrossSiteResponseParams { const std::vector<GURL>& transfer_url_chain, const Referrer& referrer, PageTransition page_transition, - int64 frame_id, + int render_frame_id, bool should_replace_current_entry) : render_view_id(render_view_id), global_request_id(global_request_id), @@ -51,7 +51,7 @@ struct CrossSiteResponseParams { transfer_url_chain(transfer_url_chain), referrer(referrer), page_transition(page_transition), - frame_id(frame_id), + render_frame_id(render_frame_id), should_replace_current_entry(should_replace_current_entry) { } @@ -61,7 +61,7 @@ struct CrossSiteResponseParams { std::vector<GURL> transfer_url_chain; Referrer referrer; PageTransition page_transition; - int64 frame_id; + int render_frame_id; bool should_replace_current_entry; }; @@ -79,7 +79,7 @@ void OnCrossSiteResponseHelper(const CrossSiteResponseParams& params) { rvh->OnCrossSiteResponse( params.global_request_id, cross_site_transferring_request.Pass(), params.transfer_url_chain, params.referrer, - params.page_transition, params.frame_id, + params.page_transition, params.render_frame_id, params.should_replace_current_entry); } else if (leak_requests_for_testing_ && cross_site_transferring_request) { // Some unit tests expect requests to be leaked in this case, so they can @@ -307,11 +307,11 @@ void CrossSiteResourceHandler::StartCrossSiteTransition( // occurred, plus the destination URL at the end. std::vector<GURL> transfer_url_chain; Referrer referrer; - int frame_id = -1; + int render_frame_id = -1; if (should_transfer) { transfer_url_chain = request()->url_chain(); referrer = Referrer(GURL(request()->referrer()), info->GetReferrerPolicy()); - frame_id = info->GetFrameID(); + render_frame_id = info->GetRenderFrameID(); appcache::AppCacheInterceptor::PrepareForCrossSiteTransfer( request(), global_id.child_id); @@ -328,7 +328,7 @@ void CrossSiteResourceHandler::StartCrossSiteTransition( transfer_url_chain, referrer, info->GetPageTransition(), - frame_id, + render_frame_id, info->should_replace_current_entry()))); } diff --git a/content/browser/loader/resource_dispatcher_host_impl.cc b/content/browser/loader/resource_dispatcher_host_impl.cc index 1dbba49..5b2e78b 100644 --- a/content/browser/loader/resource_dispatcher_host_impl.cc +++ b/content/browser/loader/resource_dispatcher_host_impl.cc @@ -917,8 +917,8 @@ void ResourceDispatcherHostImpl::UpdateRequestForTransfer( // ResourceRequestInfo rather than caching it locally. This lets us update // the info object when a transfer occurs. info->UpdateForTransfer(child_id, route_id, request_data.origin_pid, - request_id, request_data.frame_id, - request_data.parent_frame_id, filter_->GetWeakPtr()); + request_id, request_data.parent_render_frame_id, + filter_->GetWeakPtr()); // Update maps that used the old IDs, if necessary. Some transfers in tests // do not actually use a different ID, so not all maps need to be updated. @@ -1096,9 +1096,8 @@ void ResourceDispatcherHostImpl::BeginRequest( request_id, request_data.render_frame_id, request_data.is_main_frame, - request_data.frame_id, request_data.parent_is_main_frame, - request_data.parent_frame_id, + request_data.parent_render_frame_id, request_data.resource_type, request_data.transition_type, request_data.should_replace_current_entry, @@ -1294,9 +1293,8 @@ ResourceRequestInfoImpl* ResourceDispatcherHostImpl::CreateRequestInfo( request_id_, MSG_ROUTING_NONE, // render_frame_id false, // is_main_frame - -1, // frame_id false, // parent_is_main_frame - -1, // parent_frame_id + -1, // parent_render_frame_id ResourceType::SUB_RESOURCE, PAGE_TRANSITION_LINK, false, // should_replace_current_entry diff --git a/content/browser/loader/resource_dispatcher_host_unittest.cc b/content/browser/loader/resource_dispatcher_host_unittest.cc index 51bc21b..6f7a8e2 100644 --- a/content/browser/loader/resource_dispatcher_host_unittest.cc +++ b/content/browser/loader/resource_dispatcher_host_unittest.cc @@ -111,9 +111,8 @@ static ResourceHostMsg_Request CreateResourceRequest( request.appcache_host_id = appcache::kNoHostId; request.download_to_file = false; request.is_main_frame = true; - request.frame_id = 0; request.parent_is_main_frame = false; - request.parent_frame_id = -1; + request.parent_render_frame_id = -1; request.transition_type = PAGE_TRANSITION_LINK; request.allow_download = true; return request; diff --git a/content/browser/loader/resource_request_info_impl.cc b/content/browser/loader/resource_request_info_impl.cc index 4bdeb08..03d925e 100644 --- a/content/browser/loader/resource_request_info_impl.cc +++ b/content/browser/loader/resource_request_info_impl.cc @@ -40,9 +40,8 @@ void ResourceRequestInfo::AllocateForTesting( 0, // request_id render_frame_id, // render_frame_id resource_type == ResourceType::MAIN_FRAME, // is_main_frame - 0, // frame_id false, // parent_is_main_frame - 0, // parent_frame_id + 0, // parent_render_frame_id resource_type, // resource_type PAGE_TRANSITION_LINK, // transition_type false, // should_replace_current_entry @@ -95,9 +94,8 @@ ResourceRequestInfoImpl::ResourceRequestInfoImpl( int request_id, int render_frame_id, bool is_main_frame, - int64 frame_id, bool parent_is_main_frame, - int64 parent_frame_id, + int parent_render_frame_id, ResourceType::Type resource_type, PageTransition transition_type, bool should_replace_current_entry, @@ -119,9 +117,8 @@ ResourceRequestInfoImpl::ResourceRequestInfoImpl( request_id_(request_id), render_frame_id_(render_frame_id), is_main_frame_(is_main_frame), - frame_id_(frame_id), parent_is_main_frame_(parent_is_main_frame), - parent_frame_id_(parent_frame_id), + parent_render_frame_id_(parent_render_frame_id), should_replace_current_entry_(should_replace_current_entry), is_download_(is_download), is_stream_(is_stream), @@ -169,16 +166,12 @@ bool ResourceRequestInfoImpl::IsMainFrame() const { return is_main_frame_; } -int64 ResourceRequestInfoImpl::GetFrameID() const { - return frame_id_; -} - bool ResourceRequestInfoImpl::ParentIsMainFrame() const { return parent_is_main_frame_; } -int64 ResourceRequestInfoImpl::GetParentFrameID() const { - return parent_frame_id_; +int ResourceRequestInfoImpl::GetParentRenderFrameID() const { + return parent_render_frame_id_; } ResourceType::Type ResourceRequestInfoImpl::GetResourceType() const { @@ -266,14 +259,13 @@ void ResourceRequestInfoImpl::UpdateForTransfer( int route_id, int origin_pid, int request_id, - int64 frame_id, - int64 parent_frame_id, + int parent_render_frame_id, base::WeakPtr<ResourceMessageFilter> filter) { child_id_ = child_id; route_id_ = route_id; origin_pid_ = origin_pid; request_id_ = request_id; - frame_id_ = frame_id; + parent_render_frame_id_ = parent_render_frame_id; filter_ = filter; } diff --git a/content/browser/loader/resource_request_info_impl.h b/content/browser/loader/resource_request_info_impl.h index 2284274..82c81c0 100644 --- a/content/browser/loader/resource_request_info_impl.h +++ b/content/browser/loader/resource_request_info_impl.h @@ -47,9 +47,8 @@ class ResourceRequestInfoImpl : public ResourceRequestInfo, int request_id, int render_frame_id, bool is_main_frame, - int64 frame_id, bool parent_is_main_frame, - int64 parent_frame_id, + int parent_render_frame_id, ResourceType::Type resource_type, PageTransition transition_type, bool should_replace_current_entry, @@ -72,9 +71,8 @@ class ResourceRequestInfoImpl : public ResourceRequestInfo, virtual int GetRequestID() const OVERRIDE; virtual int GetRenderFrameID() const OVERRIDE; virtual bool IsMainFrame() const OVERRIDE; - virtual int64 GetFrameID() const OVERRIDE; virtual bool ParentIsMainFrame() const OVERRIDE; - virtual int64 GetParentFrameID() const OVERRIDE; + virtual int GetParentRenderFrameID() const OVERRIDE; virtual ResourceType::Type GetResourceType() const OVERRIDE; virtual int GetProcessType() const OVERRIDE; virtual blink::WebReferrerPolicy GetReferrerPolicy() const OVERRIDE; @@ -106,8 +104,7 @@ class ResourceRequestInfoImpl : public ResourceRequestInfo, int route_id, int origin_pid, int request_id, - int64 frame_id, - int64 parent_frame_id, + int parent_render_frame_id, base::WeakPtr<ResourceMessageFilter> filter); // CrossSiteResourceHandler for this request. May be null. @@ -171,9 +168,8 @@ class ResourceRequestInfoImpl : public ResourceRequestInfo, int request_id_; int render_frame_id_; bool is_main_frame_; - int64 frame_id_; bool parent_is_main_frame_; - int64 parent_frame_id_; + int parent_render_frame_id_; bool should_replace_current_entry_; bool is_download_; bool is_stream_; diff --git a/content/browser/loader/resource_scheduler_unittest.cc b/content/browser/loader/resource_scheduler_unittest.cc index 85aa777..d248b4a 100644 --- a/content/browser/loader/resource_scheduler_unittest.cc +++ b/content/browser/loader/resource_scheduler_unittest.cc @@ -148,9 +148,8 @@ class ResourceSchedulerTest : public testing::Test { ++next_request_id_, // request_id MSG_ROUTING_NONE, // render_frame_id false, // is_main_frame - 0, // frame_id false, // parent_is_main_frame - 0, // parent_frame_id + 0, // parent_render_frame_id ResourceType::SUB_RESOURCE, // resource_type PAGE_TRANSITION_LINK, // transition_type false, // should_replace_current_entry diff --git a/content/browser/renderer_host/render_view_host_impl.h b/content/browser/renderer_host/render_view_host_impl.h index ad7297e..9fdbd0a 100644 --- a/content/browser/renderer_host/render_view_host_impl.h +++ b/content/browser/renderer_host/render_view_host_impl.h @@ -328,6 +328,7 @@ class CONTENT_EXPORT RenderViewHostImpl // commit. We should ensure that the old RenderViewHost runs its unload // handler and determine whether a transfer to a different RenderViewHost is // needed. + // TODO(creis): Change to render_frame_id, then move this to RenderFrameHost. void OnCrossSiteResponse( const GlobalRequestID& global_request_id, scoped_ptr<CrossSiteTransferringRequest> cross_site_transferring_request, diff --git a/content/child/npapi/plugin_url_fetcher.cc b/content/child/npapi/plugin_url_fetcher.cc index 7359041..6ff7e8a 100644 --- a/content/child/npapi/plugin_url_fetcher.cc +++ b/content/child/npapi/plugin_url_fetcher.cc @@ -111,7 +111,6 @@ PluginURLFetcher::PluginURLFetcher(PluginStreamUrl* plugin_stream, false, render_frame_id, false, - -1, GURL(), false, -1, diff --git a/content/child/request_extra_data.cc b/content/child/request_extra_data.cc index 54f4b9d2..adc53e8 100644 --- a/content/child/request_extra_data.cc +++ b/content/child/request_extra_data.cc @@ -14,10 +14,9 @@ RequestExtraData::RequestExtraData( bool was_after_preconnect_request, int render_frame_id, bool is_main_frame, - int64 frame_id, const GURL& frame_origin, bool parent_is_main_frame, - int64 parent_frame_id, + int parent_render_frame_id, bool allow_download, PageTransition transition_type, bool should_replace_current_entry, @@ -28,10 +27,9 @@ RequestExtraData::RequestExtraData( visibility_state_(visibility_state), render_frame_id_(render_frame_id), is_main_frame_(is_main_frame), - frame_id_(frame_id), frame_origin_(frame_origin), parent_is_main_frame_(parent_is_main_frame), - parent_frame_id_(parent_frame_id), + parent_render_frame_id_(parent_render_frame_id), allow_download_(allow_download), transition_type_(transition_type), should_replace_current_entry_(should_replace_current_entry), diff --git a/content/child/request_extra_data.h b/content/child/request_extra_data.h index 3b71619..2d864c5 100644 --- a/content/child/request_extra_data.h +++ b/content/child/request_extra_data.h @@ -23,10 +23,9 @@ class CONTENT_EXPORT RequestExtraData bool was_after_preconnect_request, int render_frame_id, bool is_main_frame, - int64 frame_id, const GURL& frame_origin, bool parent_is_main_frame, - int64 parent_frame_id, + int parent_render_frame_id, bool allow_download, PageTransition transition_type, bool should_replace_current_entry, @@ -39,10 +38,9 @@ class CONTENT_EXPORT RequestExtraData } int render_frame_id() const { return render_frame_id_; } bool is_main_frame() const { return is_main_frame_; } - int64 frame_id() const { return frame_id_; } GURL frame_origin() const { return frame_origin_; } bool parent_is_main_frame() const { return parent_is_main_frame_; } - int64 parent_frame_id() const { return parent_frame_id_; } + int parent_render_frame_id() const { return parent_render_frame_id_; } bool allow_download() const { return allow_download_; } PageTransition transition_type() const { return transition_type_; } bool should_replace_current_entry() const { @@ -59,10 +57,9 @@ class CONTENT_EXPORT RequestExtraData blink::WebPageVisibilityState visibility_state_; int render_frame_id_; bool is_main_frame_; - int64 frame_id_; GURL frame_origin_; bool parent_is_main_frame_; - int64 parent_frame_id_; + int parent_render_frame_id_; bool allow_download_; PageTransition transition_type_; bool should_replace_current_entry_; diff --git a/content/child/resource_dispatcher.cc b/content/child/resource_dispatcher.cc index c8f0021..acb291a 100644 --- a/content/child/resource_dispatcher.cc +++ b/content/child/resource_dispatcher.cc @@ -132,9 +132,8 @@ IPCResourceLoaderBridge::IPCResourceLoaderBridge( request_.visiblity_state = extra_data->visibility_state(); request_.render_frame_id = extra_data->render_frame_id(); request_.is_main_frame = extra_data->is_main_frame(); - request_.frame_id = extra_data->frame_id(); request_.parent_is_main_frame = extra_data->parent_is_main_frame(); - request_.parent_frame_id = extra_data->parent_frame_id(); + request_.parent_render_frame_id = extra_data->parent_render_frame_id(); request_.allow_download = extra_data->allow_download(); request_.transition_type = extra_data->transition_type(); request_.should_replace_current_entry = @@ -148,9 +147,8 @@ IPCResourceLoaderBridge::IPCResourceLoaderBridge( request_.visiblity_state = blink::WebPageVisibilityStateVisible; request_.render_frame_id = MSG_ROUTING_NONE; request_.is_main_frame = false; - request_.frame_id = -1; request_.parent_is_main_frame = false; - request_.parent_frame_id = -1; + request_.parent_render_frame_id = -1; request_.allow_download = true; request_.transition_type = PAGE_TRANSITION_LINK; request_.should_replace_current_entry = false; diff --git a/content/child/resource_dispatcher_unittest.cc b/content/child/resource_dispatcher_unittest.cc index 6452575..320564fb 100644 --- a/content/child/resource_dispatcher_unittest.cc +++ b/content/child/resource_dispatcher_unittest.cc @@ -176,7 +176,7 @@ class ResourceDispatcherTest : public testing::Test, public IPC::Sender { request_info.routing_id = 0; RequestExtraData extra_data(blink::WebPageVisibilityStateVisible, blink::WebString(), - false, MSG_ROUTING_NONE, true, 0, GURL(), + false, MSG_ROUTING_NONE, true, GURL(), false, -1, true, PAGE_TRANSITION_LINK, false, -1, -1); request_info.extra_data = &extra_data; diff --git a/content/common/resource_messages.h b/content/common/resource_messages.h index 063bfd6..00ba724 100644 --- a/content/common/resource_messages.h +++ b/content/common/resource_messages.h @@ -185,16 +185,12 @@ IPC_STRUCT_BEGIN(ResourceHostMsg_Request) // True if |frame_id| is the main frame of a RenderView. IPC_STRUCT_MEMBER(bool, is_main_frame) - // Identifies the frame within the RenderView that sent the request. - // -1 if unknown / invalid. - IPC_STRUCT_MEMBER(int64, frame_id) - - // True if |parent_frame_id| is the main frame of a RenderView. + // True if |parent_render_frame_id| is the main frame of a RenderView. IPC_STRUCT_MEMBER(bool, parent_is_main_frame) // Identifies the parent frame of the frame that sent the request. // -1 if unknown / invalid. - IPC_STRUCT_MEMBER(int64, parent_frame_id) + IPC_STRUCT_MEMBER(int, parent_render_frame_id) IPC_STRUCT_MEMBER(content::PageTransition, transition_type) diff --git a/content/public/browser/resource_request_details.cc b/content/public/browser/resource_request_details.cc index 06badaf..c24adeb 100644 --- a/content/public/browser/resource_request_details.cc +++ b/content/public/browser/resource_request_details.cc @@ -24,7 +24,7 @@ ResourceRequestDetails::ResourceRequestDetails(const net::URLRequest* request, socket_address(request->GetSocketAddress()) { const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); resource_type = info->GetResourceType(); - frame_id = info->GetFrameID(); + render_frame_id = info->GetRenderFrameID(); // If request is from the worker process on behalf of a renderer, use // the renderer process id, since it consumes the notification response @@ -33,9 +33,9 @@ ResourceRequestDetails::ResourceRequestDetails(const net::URLRequest* request, // of ssl state change (http://crbug.com/25357). For now, just notify // the first one (works for dedicated workers and shared workers with // a single process). - int render_frame_id; + int worker_render_frame_id; if (!WorkerServiceImpl::GetInstance()->GetRendererForWorker( - info->GetChildID(), &origin_child_id, &render_frame_id)) { + info->GetChildID(), &origin_child_id, &worker_render_frame_id)) { origin_child_id = info->GetChildID(); } } diff --git a/content/public/browser/resource_request_details.h b/content/public/browser/resource_request_details.h index a55febd..856d9a3 100644 --- a/content/public/browser/resource_request_details.h +++ b/content/public/browser/resource_request_details.h @@ -39,7 +39,7 @@ struct ResourceRequestDetails { net::CertStatus ssl_cert_status; ResourceType::Type resource_type; net::HostPortPair socket_address; - int64 frame_id; + int render_frame_id; }; // Details about a redirection of a resource request. diff --git a/content/public/browser/resource_request_info.h b/content/public/browser/resource_request_info.h index 99ab625..f0badee 100644 --- a/content/public/browser/resource_request_info.h +++ b/content/public/browser/resource_request_info.h @@ -71,18 +71,15 @@ class ResourceRequestInfo { // just use GetRouteID above. virtual int GetRenderFrameID() const = 0; - // True if GetFrameID() represents a main frame in the RenderView. + // True if GetRenderFrameID() represents a main frame in the RenderView. virtual bool IsMainFrame() const = 0; - // Frame ID that sent this resource request. -1 if unknown / invalid. - virtual int64 GetFrameID() const = 0; - - // True if GetParentFrameID() represents a main frame in the RenderView. + // True if GetParentRenderFrameID() represents a main frame in the RenderView. virtual bool ParentIsMainFrame() const = 0; - // Frame ID of parent frame of frame that sent this resource request. + // Routing ID of parent frame of frame that sent this resource request. // -1 if unknown / invalid. - virtual int64 GetParentFrameID() const = 0; + virtual int GetParentRenderFrameID() const = 0; // Returns the associated resource type. virtual ResourceType::Type GetResourceType() const = 0; diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 7963113..3dfc792 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc @@ -856,7 +856,7 @@ blink::WebPlugin* RenderFrameImpl::CreatePlugin( blink::WebFrame* frame, const WebPluginInfo& info, const blink::WebPluginParams& params) { - // TODO(creis): |frame| is different from |frame_| here. This seems wrong. + DCHECK_EQ(frame_, frame); #if defined(ENABLE_PLUGINS) bool pepper_plugin_was_registered = false; scoped_refptr<PluginModule> pepper_module(PluginModule::Create( @@ -896,7 +896,7 @@ void RenderFrameImpl::OnChildFrameProcessGone() { blink::WebPlugin* RenderFrameImpl::createPlugin( blink::WebFrame* frame, const blink::WebPluginParams& params) { - // TODO(creis): |frame| is different from |frame_| here. This seems wrong. + DCHECK_EQ(frame_, frame); blink::WebPlugin* plugin = NULL; if (GetContentClient()->renderer()->OverrideCreatePlugin( this, frame, params, &plugin)) { @@ -1734,9 +1734,6 @@ void RenderFrameImpl::willSendRequest( should_replace_current_entry = navigation_state->should_replace_current_entry(); } - // TODO(creis): Remove the second routing ID from the request, now that we - // use routing IDs instead of frame IDs. (This is a viral change, so I'm - // splitting it into multiple CLs.) int parent_routing_id = frame->parent() ? FromWebFrame(frame->parent())->GetRoutingID() : -1; request.setExtraData( @@ -1745,7 +1742,6 @@ void RenderFrameImpl::willSendRequest( was_after_preconnect_request, routing_id_, (frame == top_frame), - routing_id_, GURL(frame->document().securityOrigin().toString()), frame->parent() == top_frame, parent_routing_id, |