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

Side by Side Diff: chrome/browser/prerender/prerender_contents.cc

Issue 8392041: Prerendered tabs use the same SessionStorage namespace as the tab that triggered the prerender. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove check Created 9 years, 1 month 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 (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/prerender/prerender_contents.h" 5 #include "chrome/browser/prerender/prerender_contents.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/process_util.h" 10 #include "base/process_util.h"
11 #include "base/task.h" 11 #include "base/task.h"
12 #include "base/utf_string_conversions.h" 12 #include "base/utf_string_conversions.h"
13 #include "chrome/browser/history/history_tab_helper.h" 13 #include "chrome/browser/history/history_tab_helper.h"
14 #include "chrome/browser/history/history_types.h" 14 #include "chrome/browser/history/history_types.h"
15 #include "chrome/browser/prerender/prerender_final_status.h" 15 #include "chrome/browser/prerender/prerender_final_status.h"
16 #include "chrome/browser/prerender/prerender_manager.h" 16 #include "chrome/browser/prerender/prerender_manager.h"
17 #include "chrome/browser/prerender/prerender_render_view_host_observer.h" 17 #include "chrome/browser/prerender/prerender_render_view_host_observer.h"
18 #include "chrome/browser/prerender/prerender_tracker.h" 18 #include "chrome/browser/prerender/prerender_tracker.h"
19 #include "chrome/browser/profiles/profile.h" 19 #include "chrome/browser/profiles/profile.h"
20 #include "chrome/browser/ui/browser.h" 20 #include "chrome/browser/ui/browser.h"
21 #include "chrome/browser/ui/browser_list.h" 21 #include "chrome/browser/ui/browser_list.h"
22 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 22 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
23 #include "chrome/common/chrome_notification_types.h" 23 #include "chrome/common/chrome_notification_types.h"
24 #include "chrome/common/icon_messages.h" 24 #include "chrome/common/icon_messages.h"
25 #include "chrome/common/render_messages.h" 25 #include "chrome/common/render_messages.h"
26 #include "chrome/common/url_constants.h" 26 #include "chrome/common/url_constants.h"
27 #include "content/browser/in_process_webkit/session_storage_namespace.h"
27 #include "content/browser/renderer_host/render_view_host.h" 28 #include "content/browser/renderer_host/render_view_host.h"
28 #include "content/browser/renderer_host/resource_request_details.h" 29 #include "content/browser/renderer_host/resource_request_details.h"
29 #include "content/browser/tab_contents/tab_contents_delegate.h" 30 #include "content/browser/tab_contents/tab_contents_delegate.h"
30 #include "content/browser/tab_contents/tab_contents_view.h" 31 #include "content/browser/tab_contents/tab_contents_view.h"
31 #include "content/public/browser/notification_service.h" 32 #include "content/public/browser/notification_service.h"
32 #include "content/common/view_messages.h" 33 #include "content/common/view_messages.h"
33 #include "ui/gfx/rect.h" 34 #include "ui/gfx/rect.h"
34 35
35 #if defined(OS_MACOSX) 36 #if defined(OS_MACOSX)
36 #include "content/browser/mach_broker_mac.h" 37 #include "content/browser/mach_broker_mac.h"
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 164
164 void PrerenderContents::StartPendingPrerenders() { 165 void PrerenderContents::StartPendingPrerenders() {
165 PendingPrerenderList pending_prerender_list; 166 PendingPrerenderList pending_prerender_list;
166 pending_prerender_list.swap(pending_prerender_list_); 167 pending_prerender_list.swap(pending_prerender_list_);
167 for (PendingPrerenderList::iterator it = pending_prerender_list.begin(); 168 for (PendingPrerenderList::iterator it = pending_prerender_list.begin();
168 it != pending_prerender_list.end(); 169 it != pending_prerender_list.end();
169 ++it) { 170 ++it) {
170 prerender_manager_->AddPrerender(it->origin, 171 prerender_manager_->AddPrerender(it->origin,
171 std::make_pair(child_id_, route_id_), 172 std::make_pair(child_id_, route_id_),
172 it->url, 173 it->url,
173 it->referrer); 174 it->referrer,
175 NULL);
174 } 176 }
175 } 177 }
176 178
177 PrerenderContents::PrerenderContents(PrerenderManager* prerender_manager, 179 PrerenderContents::PrerenderContents(
178 PrerenderTracker* prerender_tracker, 180 PrerenderManager* prerender_manager,
179 Profile* profile, 181 PrerenderTracker* prerender_tracker,
180 const GURL& url, 182 Profile* profile,
181 const GURL& referrer, 183 const GURL& url,
182 Origin origin, 184 const GURL& referrer,
183 uint8 experiment_id) 185 Origin origin,
186 uint8 experiment_id)
184 : prerender_manager_(prerender_manager), 187 : prerender_manager_(prerender_manager),
185 prerender_tracker_(prerender_tracker), 188 prerender_tracker_(prerender_tracker),
186 prerender_url_(url), 189 prerender_url_(url),
187 referrer_(referrer), 190 referrer_(referrer),
188 profile_(profile), 191 profile_(profile),
189 page_id_(0), 192 page_id_(0),
190 has_stopped_loading_(false), 193 has_stopped_loading_(false),
191 final_status_(FINAL_STATUS_MAX), 194 final_status_(FINAL_STATUS_MAX),
192 prerendering_has_started_(false), 195 prerendering_has_started_(false),
193 prerendering_has_been_cancelled_(false), 196 prerendering_has_been_cancelled_(false),
194 child_id_(-1), 197 child_id_(-1),
195 route_id_(-1), 198 route_id_(-1),
196 starting_page_id_(-1), 199 starting_page_id_(-1),
197 origin_(origin), 200 origin_(origin),
198 experiment_id_(experiment_id) { 201 experiment_id_(experiment_id) {
199 DCHECK(prerender_manager != NULL); 202 DCHECK(prerender_manager != NULL);
200 } 203 }
201 204
202 bool PrerenderContents::Init() { 205 bool PrerenderContents::Init() {
203 return AddAliasURL(prerender_url_); 206 return AddAliasURL(prerender_url_);
204 } 207 }
205 208
206 // static 209 // static
207 PrerenderContents::Factory* PrerenderContents::CreateFactory() { 210 PrerenderContents::Factory* PrerenderContents::CreateFactory() {
208 return new PrerenderContentsFactoryImpl(); 211 return new PrerenderContentsFactoryImpl();
209 } 212 }
210 213
211 void PrerenderContents::StartPrerendering( 214 void PrerenderContents::StartPrerendering(
212 const RenderViewHost* source_render_view_host) { 215 const RenderViewHost* source_render_view_host,
216 SessionStorageNamespace* session_storage_namespace) {
213 DCHECK(profile_ != NULL); 217 DCHECK(profile_ != NULL);
214 DCHECK(!prerendering_has_started_); 218 DCHECK(!prerendering_has_started_);
215 DCHECK(prerender_contents_.get() == NULL); 219 DCHECK(prerender_contents_.get() == NULL);
216 220
217 prerendering_has_started_ = true; 221 prerendering_has_started_ = true;
218 TabContents* new_contents = new TabContents(profile_, NULL, MSG_ROUTING_NONE, 222 TabContents* new_contents = new TabContents(profile_, NULL, MSG_ROUTING_NONE,
219 NULL, NULL); 223 NULL, session_storage_namespace);
220 prerender_contents_.reset(new TabContentsWrapper(new_contents)); 224 prerender_contents_.reset(new TabContentsWrapper(new_contents));
221 TabContentsObserver::Observe(new_contents); 225 TabContentsObserver::Observe(new_contents);
222 226
223 gfx::Rect tab_bounds; 227 gfx::Rect tab_bounds;
224 if (source_render_view_host) { 228 if (source_render_view_host) {
225 DCHECK(source_render_view_host->view() != NULL); 229 DCHECK(source_render_view_host->view() != NULL);
226 TabContents* source_tc = 230 TabContents* source_tc =
227 source_render_view_host->delegate()->GetAsTabContents(); 231 source_render_view_host->delegate()->GetAsTabContents();
228 if (source_tc) { 232 if (source_tc) {
229 // So that history merging will work, get the max page ID 233 // So that history merging will work, get the max page ID
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 bool PrerenderContents::IsCrossSiteNavigationPending() const { 662 bool PrerenderContents::IsCrossSiteNavigationPending() const {
659 if (!prerender_contents_.get() || !prerender_contents_->tab_contents()) 663 if (!prerender_contents_.get() || !prerender_contents_->tab_contents())
660 return false; 664 return false;
661 const TabContents* tab_contents = prerender_contents_->tab_contents(); 665 const TabContents* tab_contents = prerender_contents_->tab_contents();
662 return (tab_contents->GetSiteInstance() != 666 return (tab_contents->GetSiteInstance() !=
663 tab_contents->GetPendingSiteInstance()); 667 tab_contents->GetPendingSiteInstance());
664 } 668 }
665 669
666 670
667 } // namespace prerender 671 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_contents.h ('k') | chrome/browser/prerender/prerender_final_status.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698