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

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

Issue 6915019: Changes to not use the prerendered contents when window.opener needs to be set. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Addresing Chris's comments. Created 9 years, 7 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 (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_observer.h" 5 #include "chrome/browser/prerender/prerender_observer.h"
6 6
7 #include "base/time.h" 7 #include "base/time.h"
8 #include "chrome/browser/prerender/prerender_manager.h" 8 #include "chrome/browser/prerender/prerender_manager.h"
9 #include "chrome/browser/profiles/profile.h" 9 #include "chrome/browser/profiles/profile.h"
10 #include "content/browser/tab_contents/tab_contents.h" 10 #include "content/browser/tab_contents/tab_contents.h"
11 #include "content/common/view_messages.h" 11 #include "content/common/view_messages.h"
12 12
13 namespace prerender { 13 namespace prerender {
14 14
15 PrerenderObserver::PrerenderObserver(TabContents* tab_contents) 15 PrerenderObserver::PrerenderObserver(TabContents* tab_contents)
16 : TabContentsObserver(tab_contents), 16 : TabContentsObserver(tab_contents),
17 pplt_load_start_() { 17 pplt_load_start_() {
18 } 18 }
19 19
20 PrerenderObserver::~PrerenderObserver() { 20 PrerenderObserver::~PrerenderObserver() {
21 } 21 }
22 22
23 void PrerenderObserver::ProvisionalChangeToMainFrameUrl(const GURL& url) { 23 void PrerenderObserver::ProvisionalChangeToMainFrameUrl(const GURL& url,
24 bool has_opener_set) {
24 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 25 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
25 if (prerender_manager) 26 if (prerender_manager)
26 prerender_manager->MarkTabContentsAsNotPrerendered(tab_contents()); 27 prerender_manager->MarkTabContentsAsNotPrerendered(tab_contents());
27 MaybeUsePreloadedPage(url); 28 MaybeUsePreloadedPage(url, has_opener_set);
28 } 29 }
29 30
30 bool PrerenderObserver::OnMessageReceived(const IPC::Message& message) { 31 bool PrerenderObserver::OnMessageReceived(const IPC::Message& message) {
31 IPC_BEGIN_MESSAGE_MAP(PrerenderObserver, message) 32 IPC_BEGIN_MESSAGE_MAP(PrerenderObserver, message)
32 IPC_MESSAGE_HANDLER(ViewHostMsg_DidStartProvisionalLoadForFrame, 33 IPC_MESSAGE_HANDLER(ViewHostMsg_DidStartProvisionalLoadForFrame,
33 OnDidStartProvisionalLoadForFrame) 34 OnDidStartProvisionalLoadForFrame)
34 IPC_END_MESSAGE_MAP() 35 IPC_END_MESSAGE_MAP()
35 return false; 36 return false;
36 } 37 }
37 38
38 void PrerenderObserver::OnDidStartProvisionalLoadForFrame(int64 frame_id, 39 void PrerenderObserver::OnDidStartProvisionalLoadForFrame(int64 frame_id,
39 bool is_main_frame, 40 bool is_main_frame,
41 bool has_opener_set,
40 const GURL& url) { 42 const GURL& url) {
41 if (is_main_frame) { 43 if (is_main_frame) {
42 // Record the beginning of a new PPLT navigation. 44 // Record the beginning of a new PPLT navigation.
43 pplt_load_start_ = base::TimeTicks::Now(); 45 pplt_load_start_ = base::TimeTicks::Now();
44 } 46 }
45 } 47 }
46 48
47 void PrerenderObserver::DidStopLoading() { 49 void PrerenderObserver::DidStopLoading() {
48 // Compute the PPLT metric and report it in a histogram, if needed. 50 // Compute the PPLT metric and report it in a histogram, if needed.
49 if (!pplt_load_start_.is_null()) { 51 if (!pplt_load_start_.is_null()) {
50 PrerenderManager::RecordPerceivedPageLoadTime( 52 PrerenderManager::RecordPerceivedPageLoadTime(
51 base::TimeTicks::Now() - pplt_load_start_, tab_contents()); 53 base::TimeTicks::Now() - pplt_load_start_, tab_contents());
52 } 54 }
53 55
54 // Reset the PPLT metric. 56 // Reset the PPLT metric.
55 pplt_load_start_ = base::TimeTicks(); 57 pplt_load_start_ = base::TimeTicks();
56 } 58 }
57 59
58 PrerenderManager* PrerenderObserver::MaybeGetPrerenderManager() { 60 PrerenderManager* PrerenderObserver::MaybeGetPrerenderManager() {
59 return tab_contents()->profile()->GetPrerenderManager(); 61 return tab_contents()->profile()->GetPrerenderManager();
60 } 62 }
61 63
62 bool PrerenderObserver::MaybeUsePreloadedPage(const GURL& url) { 64 bool PrerenderObserver::MaybeUsePreloadedPage(const GURL& url,
65 bool has_opener_set) {
63 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 66 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
64 if (prerender_manager && 67
65 prerender_manager->MaybeUsePreloadedPage(tab_contents(), url)) 68 return prerender_manager &&
66 return true; 69 prerender_manager->MaybeUsePreloadedPage(tab_contents(),
67 return false; 70 url,
71 has_opener_set);
68 } 72 }
69 73
70 } // namespace prerender 74 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698