Index: content/child/resource_dispatcher.cc |
diff --git a/content/child/resource_dispatcher.cc b/content/child/resource_dispatcher.cc |
index 424902fb0411288794a78d12f8710e7034edd9d5..67b062585a2dbbe89ec7d8e7b776bcf73a1272bd 100644 |
--- a/content/child/resource_dispatcher.cc |
+++ b/content/child/resource_dispatcher.cc |
@@ -16,6 +16,7 @@ |
#include "base/metrics/histogram.h" |
#include "base/strings/string_util.h" |
#include "content/child/request_extra_data.h" |
+#include "content/child/site_isolation_policy.h" |
#include "content/common/inter_process_time_ticks_converter.h" |
#include "content/common/resource_messages.h" |
#include "content/public/child/resource_dispatcher_delegate.h" |
@@ -96,6 +97,9 @@ class IPCResourceLoaderBridge : public ResourceLoaderBridge { |
// The routing id used when sending IPC messages. |
int routing_id_; |
+ // The security origin of the frame that initiates this request. |
+ WebKit::WebString frame_origin_; |
+ |
bool is_synchronous_request_; |
}; |
@@ -135,7 +139,9 @@ IPCResourceLoaderBridge::IPCResourceLoaderBridge( |
extra_data->transferred_request_child_id(); |
request_.transferred_request_request_id = |
extra_data->transferred_request_request_id(); |
+ frame_origin_ = extra_data->frame_origin(); |
} else { |
+ // TODO(dsjang): Consult the expert when this branch is taken. |
Charlie Reis
2013/08/19 16:20:06
What are you trying to figure out?
dsjang
2013/08/19 21:37:18
I'm trying to make sure that the lack of request_i
|
request_.is_main_frame = false; |
request_.frame_id = -1; |
request_.parent_is_main_frame = false; |
@@ -175,7 +181,18 @@ bool IPCResourceLoaderBridge::Start(Peer* peer) { |
return false; |
} |
- peer_ = peer; |
+ // TODO(dsjang): Figure out when exactly frame_id gets -1 to see if that case |
+ // is security irrelevant. |
Charlie Reis
2013/08/19 16:20:06
Any luck tracking this down?
dsjang
2013/08/19 21:37:18
Resolved this issue, and added a comment about the
|
+ if (request_.frame_id >= 0) { |
+ // SiteIsolationPolicy is refcounted, and it is deallocated when |
+ // IPCResourceLoaderBridge is freed. |
+ // This is buggy. |
Charlie Reis
2013/08/19 16:20:06
You're storing it in a normal pointer. :)
dsjang
2013/08/19 21:37:18
Done.
|
+ peer_ = new SiteIsolationPolicy(peer, |
+ frame_origin_, |
+ request_.url, |
+ request_id_, |
+ request_.resource_type); |
+ } |
// generate the request ID, and append it to the message |
request_id_ = dispatcher_->AddPendingRequest( |
@@ -346,6 +363,7 @@ void ResourceDispatcher::OnReceivedResponse( |
ResourceResponseInfo renderer_response_info; |
ToResourceResponseInfo(*request_info, response_head, &renderer_response_info); |
+ |
Charlie Reis
2013/08/19 16:20:06
nit: Remove empty line.
dsjang
2013/08/19 21:37:18
Done.
|
request_info->peer->OnReceivedResponse(renderer_response_info); |
} |