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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/search/instant_io_context.h" 5 #include "chrome/browser/search/instant_io_context.h"
6 6
7 #include "base/string_util.h"
7 #include "content/public/browser/browser_thread.h" 8 #include "content/public/browser/browser_thread.h"
8 #include "content/public/browser/resource_context.h" 9 #include "content/public/browser/resource_context.h"
9 #include "content/public/browser/resource_request_info.h" 10 #include "content/public/browser/resource_request_info.h"
10 #include "googleurl/src/gurl.h" 11 #include "googleurl/src/gurl.h"
11 #include "net/url_request/url_request.h" 12 #include "net/url_request/url_request.h"
12 13
13 using content::BrowserThread; 14 using content::BrowserThread;
14 15
15 namespace { 16 namespace {
16 17
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 void InstantIOContext::SetUserDataOnIO( 50 void InstantIOContext::SetUserDataOnIO(
50 content::ResourceContext* resource_context, 51 content::ResourceContext* resource_context,
51 scoped_refptr<InstantIOContext> instant_io_context) { 52 scoped_refptr<InstantIOContext> instant_io_context) {
52 resource_context->SetUserData( 53 resource_context->SetUserData(
53 InstantIOContext::kInstantIOContextKeyName, 54 InstantIOContext::kInstantIOContextKeyName,
54 new base::UserDataAdapter<InstantIOContext>(instant_io_context)); 55 new base::UserDataAdapter<InstantIOContext>(instant_io_context));
55 } 56 }
56 57
57 // static 58 // static
58 void InstantIOContext::AddInstantProcessOnIO( 59 void InstantIOContext::AddInstantProcessOnIO(
59 scoped_refptr<InstantIOContext> instant_io_context, int process_id) { 60 scoped_refptr<InstantIOContext> instant_io_context,
61 int process_id,
62 const GURL& site_url) {
60 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 63 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
61 instant_io_context->process_ids_.insert(process_id); 64 instant_io_context->process_ids_.insert(process_id);
65 instant_io_context->process_sites_[process_id] = site_url.spec();
62 } 66 }
63 67
64 // static 68 // static
65 void InstantIOContext::RemoveInstantProcessOnIO( 69 void InstantIOContext::RemoveInstantProcessOnIO(
66 scoped_refptr<InstantIOContext> instant_io_context, int process_id) { 70 scoped_refptr<InstantIOContext> instant_io_context, int process_id) {
67 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 71 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
68 instant_io_context->process_ids_.erase(process_id); 72 instant_io_context->process_ids_.erase(process_id);
73 instant_io_context->process_sites_.erase(process_id);
69 } 74 }
70 75
71 // static 76 // static
72 void InstantIOContext::ClearInstantProcessesOnIO( 77 void InstantIOContext::ClearInstantProcessesOnIO(
73 scoped_refptr<InstantIOContext> instant_io_context) { 78 scoped_refptr<InstantIOContext> instant_io_context) {
74 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 79 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
75 instant_io_context->process_ids_.clear(); 80 instant_io_context->process_ids_.clear();
81 instant_io_context->process_sites_.clear();
76 } 82 }
77 83
78 // static 84 // static
79 void InstantIOContext::AddMostVisitedItemsOnIO( 85 void InstantIOContext::AddMostVisitedItemsOnIO(
80 scoped_refptr<InstantIOContext> instant_io_context, 86 scoped_refptr<InstantIOContext> instant_io_context,
81 std::vector<InstantMostVisitedItemIDPair> items) { 87 std::vector<InstantMostVisitedItemIDPair> items) {
82 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 88 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
83 instant_io_context->most_visited_item_cache_.AddItemsWithRestrictedID(items); 89 instant_io_context->most_visited_item_cache_.AddItemsWithRestrictedID(items);
84 } 90 }
85 91
(...skipping 11 matching lines...) Expand all
97 103
98 int process_id = -1; 104 int process_id = -1;
99 int render_view_id = -1; 105 int render_view_id = -1;
100 if (info->GetAssociatedRenderView(&process_id, &render_view_id) && 106 if (info->GetAssociatedRenderView(&process_id, &render_view_id) &&
101 instant_io_context->IsInstantProcess(process_id)) 107 instant_io_context->IsInstantProcess(process_id))
102 return true; 108 return true;
103 return false; 109 return false;
104 } 110 }
105 111
106 // static 112 // static
113 std::string InstantIOContext::GetExpectedOrigin(
114 const net::URLRequest* request) {
115 const content::ResourceRequestInfo* info =
116 content::ResourceRequestInfo::ForRequest(request);
117 if (!info)
118 return std::string();
119
120 InstantIOContext* instant_io_context = GetDataForRequest(request);
121 if (!instant_io_context)
122 return std::string();
123
124 int process_id = -1;
125 int render_view_id = -1;
126 if (info->GetAssociatedRenderView(&process_id, &render_view_id)) {
127 GURL site(instant_io_context->GetSiteForInstantProcess(process_id));
128 std::string origin = site.GetOrigin().spec();
129 // Origin should not include a trailing slash. That is part of the path.
130 TrimString(origin, "/", &origin);
131 return origin;
132 }
133 return std::string();
134 }
135
136 // static
107 bool InstantIOContext::GetURLForMostVisitedItemID( 137 bool InstantIOContext::GetURLForMostVisitedItemID(
108 const net::URLRequest* request, 138 const net::URLRequest* request,
109 InstantRestrictedID most_visited_item_id, 139 InstantRestrictedID most_visited_item_id,
110 GURL* url) { 140 GURL* url) {
111 InstantIOContext* instant_io_context = GetDataForRequest(request); 141 InstantIOContext* instant_io_context = GetDataForRequest(request);
112 if (!instant_io_context) { 142 if (!instant_io_context) {
113 *url = GURL(); 143 *url = GURL();
114 return false; 144 return false;
115 } 145 }
116 146
117 return instant_io_context->GetURLForMostVisitedItemID(most_visited_item_id, 147 return instant_io_context->GetURLForMostVisitedItemID(most_visited_item_id,
118 url); 148 url);
119 } 149 }
120 150
121 bool InstantIOContext::IsInstantProcess(int process_id) const { 151 bool InstantIOContext::IsInstantProcess(int process_id) const {
122 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 152 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
123 return process_ids_.count(process_id) != 0; 153 return process_ids_.find(process_id) != process_ids_.end();
154 }
155
156 // Gets the site URL associated with the given Instant process if any.
157 std::string InstantIOContext::GetSiteForInstantProcess(int process_id) const {
158 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
159 std::map<int, std::string>::const_iterator site =
160 process_sites_.find(process_id);
161 if (site != process_sites_.end())
162 return site->second;
163 return std::string();
124 } 164 }
125 165
126 bool InstantIOContext::GetURLForMostVisitedItemID( 166 bool InstantIOContext::GetURLForMostVisitedItemID(
127 InstantRestrictedID most_visited_item_id, 167 InstantRestrictedID most_visited_item_id,
128 GURL* url) const { 168 GURL* url) const {
129 InstantMostVisitedItem item; 169 InstantMostVisitedItem item;
130 if (most_visited_item_cache_.GetItemWithRestrictedID(most_visited_item_id, 170 if (most_visited_item_cache_.GetItemWithRestrictedID(most_visited_item_id,
131 &item)) { 171 &item)) {
132 *url = item.url; 172 *url = item.url;
133 return true; 173 return true;
134 } 174 }
135 175
136 *url = GURL(); 176 *url = GURL();
137 return false; 177 return false;
138 } 178 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698