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

Unified Diff: chrome/browser/search/instant_io_context.cc

Issue 13375003: Fixing iframe jank in the local omnibox popup. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removing sites, too. Created 7 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: 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(

Powered by Google App Engine
This is Rietveld 408576698