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

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

Issue 9387015: Upstreaming prerendering changes for Android. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: More changes Created 8 years, 10 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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"
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 const content::Referrer& referrer, 213 const content::Referrer& referrer,
214 Origin origin, 214 Origin origin,
215 uint8 experiment_id) 215 uint8 experiment_id)
216 : prerender_manager_(prerender_manager), 216 : prerender_manager_(prerender_manager),
217 prerender_tracker_(prerender_tracker), 217 prerender_tracker_(prerender_tracker),
218 prerender_url_(url), 218 prerender_url_(url),
219 referrer_(referrer), 219 referrer_(referrer),
220 profile_(profile), 220 profile_(profile),
221 page_id_(0), 221 page_id_(0),
222 has_stopped_loading_(false), 222 has_stopped_loading_(false),
223 has_finished_loading_(false),
223 final_status_(FINAL_STATUS_MAX), 224 final_status_(FINAL_STATUS_MAX),
224 prerendering_has_started_(false), 225 prerendering_has_started_(false),
225 match_complete_status_(MATCH_COMPLETE_DEFAULT), 226 match_complete_status_(MATCH_COMPLETE_DEFAULT),
226 prerendering_has_been_cancelled_(false), 227 prerendering_has_been_cancelled_(false),
227 child_id_(-1), 228 child_id_(-1),
228 route_id_(-1), 229 route_id_(-1),
229 origin_(origin), 230 origin_(origin),
230 experiment_id_(experiment_id) { 231 experiment_id_(experiment_id) {
231 DCHECK(prerender_manager != NULL); 232 DCHECK(prerender_manager != NULL);
232 } 233 }
(...skipping 13 matching lines...) Expand all
246 DCHECK(profile_ != NULL); 247 DCHECK(profile_ != NULL);
247 DCHECK(!prerendering_has_started_); 248 DCHECK(!prerendering_has_started_);
248 DCHECK(prerender_contents_.get() == NULL); 249 DCHECK(prerender_contents_.get() == NULL);
249 250
250 prerendering_has_started_ = true; 251 prerendering_has_started_ = true;
251 WebContents* new_contents = WebContents::Create( 252 WebContents* new_contents = WebContents::Create(
252 profile_, NULL, MSG_ROUTING_NONE, NULL, session_storage_namespace); 253 profile_, NULL, MSG_ROUTING_NONE, NULL, session_storage_namespace);
253 prerender_contents_.reset(new TabContentsWrapper(new_contents)); 254 prerender_contents_.reset(new TabContentsWrapper(new_contents));
254 content::WebContentsObserver::Observe(new_contents); 255 content::WebContentsObserver::Observe(new_contents);
255 256
256 gfx::Rect tab_bounds(640, 480); 257 gfx::Rect tab_bounds(640, 480);
dominich 2012/02/14 01:11:20 This is a recent change, but a default is set here
257 if (source_render_view_host) { 258 if (source_render_view_host) {
258 DCHECK(source_render_view_host->view() != NULL); 259 DCHECK(source_render_view_host->view() != NULL);
259 WebContents* source_wc = 260 WebContents* source_wc =
260 source_render_view_host->delegate()->GetAsWebContents(); 261 source_render_view_host->delegate()->GetAsWebContents();
261 if (source_wc) { 262 if (source_wc) {
262 // Set the size of the new TC to that of the old TC. 263 // Set the size of the new TC to that of the old TC.
263 source_wc->GetView()->GetContainerBounds(&tab_bounds); 264 source_wc->GetView()->GetContainerBounds(&tab_bounds);
264 } 265 }
265 } else { 266 } else {
266 // Try to get the active tab of the active browser and use that for tab 267 // Try to get the active tab of the active browser and use that for tab
267 // bounds. If the browser has never been active, we will fail to get a size 268 // bounds. If the browser has never been active, we will fail to get a size
268 // but we shouldn't be prerendering in that case anyway. 269 // but we shouldn't be prerendering in that case anyway.
269 Browser* active_browser = BrowserList::GetLastActiveWithProfile(profile_); 270 Browser* active_browser = BrowserList::GetLastActiveWithProfile(profile_);
270 if (active_browser) { 271 if (active_browser) {
271 WebContents* active_web_contents = active_browser->GetWebContentsAt( 272 WebContents* active_web_contents = active_browser->GetWebContentsAt(
272 active_browser->active_index()); 273 active_browser->active_index());
273 if (active_web_contents) 274 if (active_web_contents)
274 active_web_contents->GetView()->GetContainerBounds(&tab_bounds); 275 active_web_contents->GetView()->GetContainerBounds(&tab_bounds);
276 } else {
277 gfx::Rect default_tab_bounds = prerender_manager_->default_tab_bounds();
dominich 2012/02/14 01:11:20 So you don't need this unless you want to override
Jay Civelli 2012/02/14 03:13:51 Moved to the config, as you suggested later on.
278 if (!default_tab_bounds.IsEmpty())
279 tab_bounds = default_tab_bounds;
275 } 280 }
276 } 281 }
277 282
278 tab_contents_delegate_.reset(new TabContentsDelegateImpl(this)); 283 tab_contents_delegate_.reset(new TabContentsDelegateImpl(this));
279 new_contents->SetDelegate(tab_contents_delegate_.get()); 284 new_contents->SetDelegate(tab_contents_delegate_.get());
280 285
281 // Set the size of the prerender TabContents. 286 // Set the size of the prerender TabContents.
282 prerender_contents_->web_contents()->GetView()->SizeContents( 287 prerender_contents_->web_contents()->GetView()->SizeContents(
283 tab_bounds.size()); 288 tab_bounds.size());
284 289
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 510
506 void PrerenderContents::OnJSOutOfMemory() { 511 void PrerenderContents::OnJSOutOfMemory() {
507 Destroy(FINAL_STATUS_JS_OUT_OF_MEMORY); 512 Destroy(FINAL_STATUS_JS_OUT_OF_MEMORY);
508 } 513 }
509 514
510 void PrerenderContents::RenderViewGone(base::TerminationStatus status) { 515 void PrerenderContents::RenderViewGone(base::TerminationStatus status) {
511 Destroy(FINAL_STATUS_RENDERER_CRASHED); 516 Destroy(FINAL_STATUS_RENDERER_CRASHED);
512 } 517 }
513 518
514 void PrerenderContents::DidStopLoading() { 519 void PrerenderContents::DidStopLoading() {
515 has_stopped_loading_ = true; 520 has_stopped_loading_ = true;
dominich 2012/02/14 01:11:20 Do you need to set has_finished_loading_ = false e
Jay Civelli 2012/02/14 03:13:51 Do you mean has_finished_loading_ = true? I don't
516 } 521 }
517 522
518 void PrerenderContents::DidStartProvisionalLoadForFrame( 523 void PrerenderContents::DidStartProvisionalLoadForFrame(
519 int64 frame_id, 524 int64 frame_id,
520 bool is_main_frame, 525 bool is_main_frame,
521 const GURL& validated_url, 526 const GURL& validated_url,
522 bool is_error_page, 527 bool is_error_page,
523 RenderViewHost* render_view_host) { 528 RenderViewHost* render_view_host) {
524 if (is_main_frame) { 529 if (is_main_frame) {
525 if (!AddAliasURL(validated_url)) 530 if (!AddAliasURL(validated_url))
526 return; 531 return;
527 532
528 // Usually, this event fires if the user clicks or enters a new URL. 533 // Usually, this event fires if the user clicks or enters a new URL.
529 // Neither of these can happen in the case of an invisible prerender. 534 // Neither of these can happen in the case of an invisible prerender.
530 // So the cause is: Some JavaScript caused a new URL to be loaded. In that 535 // So the cause is: Some JavaScript caused a new URL to be loaded. In that
531 // case, the spinner would start again in the browser, so we must reset 536 // case, the spinner would start again in the browser, so we must reset
532 // has_stopped_loading_ so that the spinner won't be stopped. 537 // has_stopped_loading_ so that the spinner won't be stopped.
533 has_stopped_loading_ = false; 538 has_stopped_loading_ = false;
539 has_finished_loading_ = false;
534 } 540 }
535 } 541 }
536 542
543 void PrerenderContents::DidFinishLoad(int64 frame_id,
544 const GURL& validated_url,
545 bool is_main_frame) {
546 if (is_main_frame)
547 has_finished_loading_ = true;
548 }
549
537 bool PrerenderContents::ShouldSuppressDialogs() { 550 bool PrerenderContents::ShouldSuppressDialogs() {
538 // Always suppress JavaScript messages if they're triggered by a page being 551 // Always suppress JavaScript messages if they're triggered by a page being
539 // prerendered. 552 // prerendered.
540 // We still want to show the user the message when they navigate to this 553 // We still want to show the user the message when they navigate to this
541 // page, so cancel this prerender. 554 // page, so cancel this prerender.
542 Destroy(FINAL_STATUS_JAVASCRIPT_ALERT); 555 Destroy(FINAL_STATUS_JAVASCRIPT_ALERT);
543 return true; 556 return true;
544 } 557 }
545 558
546 void PrerenderContents::Destroy(FinalStatus final_status) { 559 void PrerenderContents::Destroy(FinalStatus final_status) {
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 bool PrerenderContents::IsCrossSiteNavigationPending() const { 664 bool PrerenderContents::IsCrossSiteNavigationPending() const {
652 if (!prerender_contents_.get() || !prerender_contents_->web_contents()) 665 if (!prerender_contents_.get() || !prerender_contents_->web_contents())
653 return false; 666 return false;
654 const WebContents* web_contents = prerender_contents_->web_contents(); 667 const WebContents* web_contents = prerender_contents_->web_contents();
655 return (web_contents->GetSiteInstance() != 668 return (web_contents->GetSiteInstance() !=
656 web_contents->GetPendingSiteInstance()); 669 web_contents->GetPendingSiteInstance());
657 } 670 }
658 671
659 672
660 } // namespace prerender 673 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698