| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |