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

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: Fix NetInternals browser test 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 19 matching lines...) Expand all
56 } 57 }
57 GURL url_; 58 GURL url_;
58 }; 59 };
59 60
60 } // end namespace 61 } // end namespace
61 62
62 class PrerenderContentsFactoryImpl : public PrerenderContents::Factory { 63 class PrerenderContentsFactoryImpl : public PrerenderContents::Factory {
63 public: 64 public:
64 virtual PrerenderContents* CreatePrerenderContents( 65 virtual PrerenderContents* CreatePrerenderContents(
65 PrerenderManager* prerender_manager, PrerenderTracker* prerender_tracker, 66 PrerenderManager* prerender_manager, PrerenderTracker* prerender_tracker,
66 Profile* profile, const GURL& url, const GURL& referrer, 67 SessionStorageNamespace* session_storage_namespace, Profile* profile,
68 const GURL& url, const GURL& referrer,
67 Origin origin, uint8 experiment_id) OVERRIDE { 69 Origin origin, uint8 experiment_id) OVERRIDE {
68 return new PrerenderContents(prerender_manager, prerender_tracker, profile, 70 return new PrerenderContents(prerender_manager, prerender_tracker,
71 session_storage_namespace, profile,
69 url, referrer, origin, experiment_id); 72 url, referrer, origin, experiment_id);
70 } 73 }
71 }; 74 };
72 75
73 PrerenderContents::PendingPrerenderData::PendingPrerenderData( 76 PrerenderContents::PendingPrerenderData::PendingPrerenderData(
74 Origin origin, 77 Origin origin,
75 const GURL& url, 78 const GURL& url,
76 const GURL& referrer) 79 const GURL& referrer)
77 : origin(origin), 80 : origin(origin),
78 url(url), 81 url(url),
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 166
164 void PrerenderContents::StartPendingPrerenders() { 167 void PrerenderContents::StartPendingPrerenders() {
165 PendingPrerenderList pending_prerender_list; 168 PendingPrerenderList pending_prerender_list;
166 pending_prerender_list.swap(pending_prerender_list_); 169 pending_prerender_list.swap(pending_prerender_list_);
167 for (PendingPrerenderList::iterator it = pending_prerender_list.begin(); 170 for (PendingPrerenderList::iterator it = pending_prerender_list.begin();
168 it != pending_prerender_list.end(); 171 it != pending_prerender_list.end();
169 ++it) { 172 ++it) {
170 prerender_manager_->AddPrerender(it->origin, 173 prerender_manager_->AddPrerender(it->origin,
171 std::make_pair(child_id_, route_id_), 174 std::make_pair(child_id_, route_id_),
172 it->url, 175 it->url,
173 it->referrer); 176 it->referrer,
177 NULL);
174 } 178 }
175 } 179 }
176 180
177 PrerenderContents::PrerenderContents(PrerenderManager* prerender_manager, 181 PrerenderContents::PrerenderContents(
178 PrerenderTracker* prerender_tracker, 182 PrerenderManager* prerender_manager,
179 Profile* profile, 183 PrerenderTracker* prerender_tracker,
180 const GURL& url, 184 SessionStorageNamespace* session_storage_namespace,
181 const GURL& referrer, 185 Profile* profile,
182 Origin origin, 186 const GURL& url,
183 uint8 experiment_id) 187 const GURL& referrer,
188 Origin origin,
189 uint8 experiment_id)
184 : prerender_manager_(prerender_manager), 190 : prerender_manager_(prerender_manager),
185 prerender_tracker_(prerender_tracker), 191 prerender_tracker_(prerender_tracker),
192 session_storage_namespace_(session_storage_namespace),
186 prerender_url_(url), 193 prerender_url_(url),
187 referrer_(referrer), 194 referrer_(referrer),
188 profile_(profile), 195 profile_(profile),
189 page_id_(0), 196 page_id_(0),
190 has_stopped_loading_(false), 197 has_stopped_loading_(false),
191 final_status_(FINAL_STATUS_MAX), 198 final_status_(FINAL_STATUS_MAX),
192 prerendering_has_started_(false), 199 prerendering_has_started_(false),
193 prerendering_has_been_cancelled_(false), 200 prerendering_has_been_cancelled_(false),
194 child_id_(-1), 201 child_id_(-1),
195 route_id_(-1), 202 route_id_(-1),
(...skipping 13 matching lines...) Expand all
209 } 216 }
210 217
211 void PrerenderContents::StartPrerendering( 218 void PrerenderContents::StartPrerendering(
212 const RenderViewHost* source_render_view_host) { 219 const RenderViewHost* source_render_view_host) {
213 DCHECK(profile_ != NULL); 220 DCHECK(profile_ != NULL);
214 DCHECK(!prerendering_has_started_); 221 DCHECK(!prerendering_has_started_);
215 DCHECK(prerender_contents_.get() == NULL); 222 DCHECK(prerender_contents_.get() == NULL);
216 223
217 prerendering_has_started_ = true; 224 prerendering_has_started_ = true;
218 TabContents* new_contents = new TabContents(profile_, NULL, MSG_ROUTING_NONE, 225 TabContents* new_contents = new TabContents(profile_, NULL, MSG_ROUTING_NONE,
219 NULL, NULL); 226 NULL, session_storage_namespace_);
220 prerender_contents_.reset(new TabContentsWrapper(new_contents)); 227 prerender_contents_.reset(new TabContentsWrapper(new_contents));
221 TabContentsObserver::Observe(new_contents); 228 TabContentsObserver::Observe(new_contents);
222 229
223 gfx::Rect tab_bounds; 230 gfx::Rect tab_bounds;
224 if (source_render_view_host) { 231 if (source_render_view_host) {
225 DCHECK(source_render_view_host->view() != NULL); 232 DCHECK(source_render_view_host->view() != NULL);
226 TabContents* source_tc = 233 TabContents* source_tc =
227 source_render_view_host->delegate()->GetAsTabContents(); 234 source_render_view_host->delegate()->GetAsTabContents();
228 if (source_tc) { 235 if (source_tc) {
229 // So that history merging will work, get the max page ID 236 // 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 { 665 bool PrerenderContents::IsCrossSiteNavigationPending() const {
659 if (!prerender_contents_.get() || !prerender_contents_->tab_contents()) 666 if (!prerender_contents_.get() || !prerender_contents_->tab_contents())
660 return false; 667 return false;
661 const TabContents* tab_contents = prerender_contents_->tab_contents(); 668 const TabContents* tab_contents = prerender_contents_->tab_contents();
662 return (tab_contents->GetSiteInstance() != 669 return (tab_contents->GetSiteInstance() !=
663 tab_contents->GetPendingSiteInstance()); 670 tab_contents->GetPendingSiteInstance());
664 } 671 }
665 672
666 673
667 } // namespace prerender 674 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698