| Index: chrome/browser/search/instant_io_context.cc
|
| diff --git a/chrome/browser/search/instant_io_context.cc b/chrome/browser/search/instant_io_context.cc
|
| index ba1dc3f62e3b6e269d3051aa6ed776fac5471e24..8248a3e829a4825653ae1c06dc1b83f12ed3096b 100644
|
| --- a/chrome/browser/search/instant_io_context.cc
|
| +++ b/chrome/browser/search/instant_io_context.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "chrome/browser/search/instant_io_context.h"
|
|
|
| +#include "base/string_util.h"
|
| #include "content/public/browser/browser_thread.h"
|
| #include "content/public/browser/resource_context.h"
|
| #include "content/public/browser/resource_request_info.h"
|
| @@ -56,9 +57,12 @@ void InstantIOContext::SetUserDataOnIO(
|
|
|
| // static
|
| void InstantIOContext::AddInstantProcessOnIO(
|
| - scoped_refptr<InstantIOContext> instant_io_context, int process_id) {
|
| + scoped_refptr<InstantIOContext> instant_io_context,
|
| + int process_id,
|
| + const GURL& site_url) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| instant_io_context->process_ids_.insert(process_id);
|
| + instant_io_context->process_sites_[process_id] = site_url.spec();
|
| }
|
|
|
| // static
|
| @@ -66,6 +70,7 @@ void InstantIOContext::RemoveInstantProcessOnIO(
|
| scoped_refptr<InstantIOContext> instant_io_context, int process_id) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| instant_io_context->process_ids_.erase(process_id);
|
| + instant_io_context->process_sites_.erase(process_id);
|
| }
|
|
|
| // static
|
| @@ -73,6 +78,7 @@ void InstantIOContext::ClearInstantProcessesOnIO(
|
| scoped_refptr<InstantIOContext> instant_io_context) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| instant_io_context->process_ids_.clear();
|
| + instant_io_context->process_sites_.clear();
|
| }
|
|
|
| // static
|
| @@ -104,6 +110,30 @@ bool InstantIOContext::ShouldServiceRequest(const net::URLRequest* request) {
|
| }
|
|
|
| // static
|
| +std::string InstantIOContext::GetExpectedOrigin(
|
| + const net::URLRequest* request) {
|
| + const content::ResourceRequestInfo* info =
|
| + content::ResourceRequestInfo::ForRequest(request);
|
| + if (!info)
|
| + return std::string();
|
| +
|
| + InstantIOContext* instant_io_context = GetDataForRequest(request);
|
| + if (!instant_io_context)
|
| + return std::string();
|
| +
|
| + int process_id = -1;
|
| + int render_view_id = -1;
|
| + if (info->GetAssociatedRenderView(&process_id, &render_view_id)) {
|
| + GURL site(instant_io_context->GetSiteForInstantProcess(process_id));
|
| + std::string origin = site.GetOrigin().spec();
|
| + // Origin should not include a trailing slash. That is part of the path.
|
| + TrimString(origin, "/", &origin);
|
| + return origin;
|
| + }
|
| + return std::string();
|
| +}
|
| +
|
| +// static
|
| bool InstantIOContext::GetURLForMostVisitedItemID(
|
| const net::URLRequest* request,
|
| InstantRestrictedID most_visited_item_id,
|
| @@ -120,7 +150,17 @@ bool InstantIOContext::GetURLForMostVisitedItemID(
|
|
|
| bool InstantIOContext::IsInstantProcess(int process_id) const {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| - return process_ids_.count(process_id) != 0;
|
| + return process_ids_.find(process_id) != process_ids_.end();
|
| +}
|
| +
|
| +// Gets the site URL associated with the given Instant process if any.
|
| +std::string InstantIOContext::GetSiteForInstantProcess(int process_id) const {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| + std::map<int, std::string>::const_iterator site =
|
| + process_sites_.find(process_id);
|
| + if (site != process_sites_.end())
|
| + return site->second;
|
| + return std::string();
|
| }
|
|
|
| bool InstantIOContext::GetURLForMostVisitedItemID(
|
|
|