summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-23 20:27:33 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-23 20:27:33 +0000
commitfd0719894fe7432eec3155bd23cfab4bb22d4595 (patch)
tree656b6966cdcc64f66b92f4d6094179b1b4c05035
parent15bb2f4987e01dbb765207d792edbfe48efe68d1 (diff)
downloadchromium_src-fd0719894fe7432eec3155bd23cfab4bb22d4595.zip
chromium_src-fd0719894fe7432eec3155bd23cfab4bb22d4595.tar.gz
chromium_src-fd0719894fe7432eec3155bd23cfab4bb22d4595.tar.bz2
Two minor tweaks to prerender:
. Don't attempt to swap if the TabContentsWrapper has no delegate. . Reset the delegate before returning the TabContents. I'm doing this as we have crash reports of a TabContentsDelegate being deleted before the TabContents. BUG=85247 TEST=none R=cbentzel@chromium.org Review URL: http://codereview.chromium.org/7246012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@90256 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/prerender/prerender_contents.cc1
-rw-r--r--chrome/browser/prerender/prerender_observer.cc8
-rw-r--r--chrome/browser/prerender/prerender_observer.h7
-rw-r--r--chrome/browser/ui/tab_contents/tab_contents_wrapper.cc2
4 files changed, 13 insertions, 5 deletions
diff --git a/chrome/browser/prerender/prerender_contents.cc b/chrome/browser/prerender/prerender_contents.cc
index 3247aae..ae72b91 100644
--- a/chrome/browser/prerender/prerender_contents.cc
+++ b/chrome/browser/prerender/prerender_contents.cc
@@ -537,6 +537,7 @@ void PrerenderContents::DestroyWhenUsingTooManyResources() {
}
TabContentsWrapper* PrerenderContents::ReleasePrerenderContents() {
+ prerender_contents_->tab_contents()->set_delegate(NULL);
render_view_host_observer_.reset();
prerender_contents_->download_tab_helper()->set_delegate(NULL);
TabContentsObserver::Observe(NULL);
diff --git a/chrome/browser/prerender/prerender_observer.cc b/chrome/browser/prerender/prerender_observer.cc
index 8f286aa..eb5e257 100644
--- a/chrome/browser/prerender/prerender_observer.cc
+++ b/chrome/browser/prerender/prerender_observer.cc
@@ -7,13 +7,15 @@
#include "base/time.h"
#include "chrome/browser/prerender/prerender_manager.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
#include "content/browser/tab_contents/tab_contents.h"
#include "content/common/view_messages.h"
namespace prerender {
-PrerenderObserver::PrerenderObserver(TabContents* tab_contents)
- : TabContentsObserver(tab_contents),
+PrerenderObserver::PrerenderObserver(TabContentsWrapper* tab)
+ : TabContentsObserver(tab->tab_contents()),
+ tab_(tab),
pplt_load_start_() {
}
@@ -22,6 +24,8 @@ PrerenderObserver::~PrerenderObserver() {
void PrerenderObserver::ProvisionalChangeToMainFrameUrl(const GURL& url,
bool has_opener_set) {
+ if (!tab_->delegate())
+ return; // PrerenderManager needs a delegate to handle the swap.
PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
if (!prerender_manager)
return;
diff --git a/chrome/browser/prerender/prerender_observer.h b/chrome/browser/prerender/prerender_observer.h
index 324644c..9f8526a 100644
--- a/chrome/browser/prerender/prerender_observer.h
+++ b/chrome/browser/prerender/prerender_observer.h
@@ -9,7 +9,7 @@
#include "base/time.h"
-class TabContents;
+class TabContentsWrapper;
class GURL;
namespace prerender {
@@ -21,7 +21,7 @@ class PrerenderManager;
// to compare PLT's with prerendering enabled and disabled.
class PrerenderObserver : public TabContentsObserver {
public:
- explicit PrerenderObserver(TabContents* tab_contents);
+ explicit PrerenderObserver(TabContentsWrapper* tab);
virtual ~PrerenderObserver();
// TabContentsObserver implementation.
@@ -51,6 +51,9 @@ class PrerenderObserver : public TabContentsObserver {
// Returns whether the TabContents being observed is currently prerendering.
bool IsPrerendering();
+ // TabContentsWrapper we're created for.
+ TabContentsWrapper* tab_;
+
// System time at which the current load was started for the purpose of
// the perceived page load time (PPLT).
base::TimeTicks pplt_load_start_;
diff --git a/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc b/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc
index 18fc132..4ee881b 100644
--- a/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc
+++ b/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc
@@ -137,7 +137,7 @@ TabContentsWrapper::TabContentsWrapper(TabContents* contents)
external_protocol_observer_.reset(new ExternalProtocolObserver(contents));
file_select_observer_.reset(new FileSelectObserver(contents));
plugin_observer_.reset(new PluginObserver(this));
- prerender_observer_.reset(new prerender::PrerenderObserver(contents));
+ prerender_observer_.reset(new prerender::PrerenderObserver(this));
print_preview_.reset(new printing::PrintPreviewMessageHandler(contents));
webnavigation_observer_.reset(
new ExtensionWebNavigationTabObserver(contents));