Chromium Code Reviews| Index: chrome/browser/prerender/prerender_browsertest.cc |
| diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc |
| index e2e8c8418e752d98b9f9cf324c0d7fa234791b5c..70528621ddd672f905a6a1b4e2cdac1cd0bce824 100644 |
| --- a/chrome/browser/prerender/prerender_browsertest.cc |
| +++ b/chrome/browser/prerender/prerender_browsertest.cc |
| @@ -7,6 +7,7 @@ |
| #include "base/command_line.h" |
| #include "base/path_service.h" |
| #include "base/string_util.h" |
| +#include "base/utf_string_conversions.h" |
| #include "chrome/browser/content_settings/host_content_settings_map.h" |
| #include "chrome/browser/prefs/pref_service.h" |
| #include "chrome/browser/prerender/prerender_contents.h" |
| @@ -24,6 +25,7 @@ |
| #include "chrome/test/ui_test_utils.h" |
| #include "content/browser/renderer_host/render_view_host.h" |
| #include "content/browser/tab_contents/tab_contents.h" |
| +#include "content/browser/tab_contents/title_updated_details.h" |
| #include "content/common/notification_service.h" |
| #include "grit/generated_resources.h" |
| #include "net/url_request/url_request_context.h" |
| @@ -315,7 +317,8 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
| : safe_browsing_factory_(new TestSafeBrowsingServiceFactory()), |
| prerender_contents_factory_(NULL), |
| use_https_src_server_(false), |
| - call_javascript_(true) { |
| + call_javascript_(true), |
| + loader_path_("files/prerender/prerender_loader.html") { |
| EnableDOMAutomation(); |
| } |
| @@ -465,6 +468,10 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
| return safe_browsing_factory_->most_recent_service(); |
| } |
| + void set_loader_path(const std::string& path) { |
| + loader_path_ = path; |
| + } |
| + |
| private: |
| void PrerenderTestURLImpl( |
| const GURL& url, |
| @@ -477,7 +484,7 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
| make_pair("REPLACE_WITH_PRERENDER_URL", dest_url_.spec())); |
| std::string replacement_path; |
| ASSERT_TRUE(net::TestServer::GetFilePathWithReplacements( |
| - "files/prerender/prerender_loader.html", |
| + loader_path_, |
| replacement_text, |
| &replacement_path)); |
| @@ -571,6 +578,7 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
| GURL dest_url_; |
| bool use_https_src_server_; |
| bool call_javascript_; |
| + std::string loader_path_; |
| }; |
| // Checks that a page is correctly prerendered in the case of a |
| @@ -1340,4 +1348,61 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderLocalStorageWrite) { |
| NavigateToDestURL(); |
| } |
| +class TitleWatcher : public NotificationObserver { |
|
dominich
2011/06/08 22:19:19
Can you put this up with the other classes at the
mmenke
2011/06/08 22:29:05
nit: Should stick this in an anonymous namespace,
cbentzel
2011/06/09 00:49:49
Done.
cbentzel
2011/06/09 00:49:49
Done.
|
| + public: |
| + TitleWatcher(TabContents* tab_contents, const string16& expected_title) |
| + : expected_title_(expected_title), |
| + title_observed_(false), |
| + quit_loop_on_observation_(false) { |
| + notification_registrar_.Add(this, |
| + NotificationType::TAB_CONTENTS_TITLE_UPDATED, |
| + Source<TabContents>(tab_contents)); |
| + } |
| + |
| + ~TitleWatcher() { |
| + } |
| + |
| + virtual void Observe(NotificationType type, |
| + const NotificationSource& source, |
| + const NotificationDetails& details) OVERRIDE { |
| + if (type != NotificationType::TAB_CONTENTS_TITLE_UPDATED) |
| + return; |
| + |
| + TitleUpdatedDetails* title_details = |
| + Details<TitleUpdatedDetails>(details).ptr(); |
| + if (!title_details || title_details->entry()->title() != expected_title_) |
| + return; |
| + |
| + title_observed_ = true; |
| + if (quit_loop_on_observation_) |
| + MessageLoopForUI::current()->Quit(); |
|
dominich
2011/06/08 22:19:19
Please make sure you run this on the release trybo
|
| + } |
| + |
| + bool WaitForTitleChange() { |
| + if (title_observed_) |
| + return true; |
| + quit_loop_on_observation_ = true; |
| + ui_test_utils::RunMessageLoop(); |
| + return title_observed_; |
| + } |
| + |
| + private: |
| + string16 expected_title_; |
| + NotificationRegistrar notification_registrar_; |
| + bool title_observed_; |
| + bool quit_loop_on_observation_; |
| +}; |
| + |
| +// Checks that when a prerendered page is swapped in to a referring page, the |
| +// unload handlers on the referring page are executed. |
| +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderUnload) { |
| + set_loader_path("files/prerender/prerender_loader_with_unload.html"); |
| + PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
| + TabContents* tab_contents = browser()->GetSelectedTabContents(); |
| + string16 expected_title = ASCIIToUTF16("Unloaded"); |
|
dominich
2011/06/08 22:19:19
nit: No need for this to be a local variable.
cbentzel
2011/06/09 00:49:49
Done.
|
| + TitleWatcher title_watcher(tab_contents, expected_title); |
| + NavigateToDestURL(); |
| + EXPECT_TRUE(title_watcher.WaitForTitleChange()); |
| +} |
| + |
| } // namespace prerender |