better_session_restore_browsertest.cc revision 58537e28ecd584eab876aee8be7156509866d23a
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h" 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/lazy_instance.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/browser_process.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/enterprise_extension_observer.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/cookie_settings.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/confirm_infobar_delegate.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/session_startup_pref.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile_impl.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sessions/session_backend.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sessions/session_service_factory.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_iterator.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/startup/startup_browser_creator.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/content_settings.h" 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_names.h" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/url_constants.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/url_constants.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test_utils.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_util.h" 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/upload_bytes_element_reader.h" 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/upload_data_stream.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_filter.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_test_job.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Browser* FindOneOtherBrowserForProfile(Profile* profile, 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser* not_this_browser) { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (chrome::BrowserIterator it; !it.done(); it.Next()) { 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (*it != not_this_browser && it->profile() == profile) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return *it; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// We need to serve the test files so that PRE_Test and Test can access the same 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// page using the same URL. In addition, perceived security origin of the page 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// needs to stay the same, so e.g., redirecting the URL requests doesn't 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// work. (If we used a test server, the PRE_Test and Test would have separate 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// instances running on separate ports.) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::LazyInstance<std::map<std::string, std::string> > g_file_contents = 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LAZY_INSTANCE_INITIALIZER; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::URLRequestJob* URLRequestFaker( 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::URLRequest* request, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::NetworkDelegate* network_delegate, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& scheme) { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new net::URLRequestTestJob( 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request, network_delegate, net::URLRequestTestJob::test_headers(), 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_file_contents.Get()[request->url().path()], true); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::LazyInstance<std::string> g_last_upload_bytes = LAZY_INSTANCE_INITIALIZER; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)net::URLRequestJob* URLRequestFakerForPostRequests( 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::URLRequest* request, 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::NetworkDelegate* network_delegate, 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& scheme) { 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Read the uploaded data and store it to g_last_upload_bytes. 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const net::UploadDataStream* upload_data = request->get_upload(); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_last_upload_bytes.Get().clear(); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (upload_data) { 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ScopedVector<net::UploadElementReader>& readers = 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) upload_data->element_readers(); 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < readers.size(); ++i) { 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const net::UploadBytesElementReader* bytes_reader = 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) readers[i]->AsBytesReader(); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (bytes_reader) { 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_last_upload_bytes.Get() += 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string(bytes_reader->bytes(), bytes_reader->length()); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new net::URLRequestTestJob( 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) request, network_delegate, net::URLRequestTestJob::test_headers(), 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "<html><head><title>PASS</title></head><body>Data posted</body></html>", 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BetterSessionRestoreTest : public InProcessBrowserTest { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BetterSessionRestoreTest() 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : fake_server_address_("http://www.test.com/"), 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_path_("session_restore/"), 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) title_pass_(ASCIIToUTF16("PASS")), 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_storing_(ASCIIToUTF16("STORING")), 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_error_write_failed_(ASCIIToUTF16("ERROR_WRITE_FAILED")), 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) title_error_empty_(ASCIIToUTF16("ERROR_EMPTY")) { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up the URL request filtering. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> test_files; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_files.push_back("common.js"); 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_files.push_back("cookies.html"); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_files.push_back("local_storage.html"); 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_files.push_back("post.html"); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_files.push_back("post_with_password.html"); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_files.push_back("session_cookies.html"); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_files.push_back("session_storage.html"); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath test_file_dir; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(PathService::Get(base::DIR_SOURCE_ROOT, &test_file_dir)); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_file_dir = 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_file_dir.AppendASCII("chrome/test/data").AppendASCII(test_path_); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::vector<std::string>::const_iterator it = test_files.begin(); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != test_files.end(); ++it) { 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path = test_file_dir.AppendASCII(*it); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string contents; 13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CHECK(base::ReadFileToString(path, &contents)); 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_file_contents.Get()["/" + test_path_ + *it] = contents; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::URLRequestFilter::GetInstance()->AddUrlHandler( 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(fake_server_address_ + test_path_ + *it), 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &URLRequestFaker); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::URLRequestFilter::GetInstance()->AddUrlHandler( 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL(fake_server_address_ + test_path_ + "posted.php"), 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &URLRequestFakerForPostRequests); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StoreDataWithPage(const std::string& filename) { 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StoreDataWithPage(browser(), filename); 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void StoreDataWithPage(Browser* browser, const std::string& filename) { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* web_contents = 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->tab_strip_model()->GetActiveWebContents(); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TitleWatcher title_watcher(web_contents, title_storing_); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_watcher.AlsoWaitForTitle(title_pass_); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_watcher.AlsoWaitForTitle(title_error_write_failed_); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_watcher.AlsoWaitForTitle(title_error_empty_); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL( 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser, GURL(fake_server_address_ + test_path_ + filename)); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 final_title = title_watcher.WaitAndGetTitle(); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(title_storing_, final_title); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NavigateAndCheckStoredData(const std::string& filename) { 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NavigateAndCheckStoredData(browser(), filename); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NavigateAndCheckStoredData(Browser* browser, 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& filename) { 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Navigate to a page which has previously stored data; check that the 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // stored data can be accessed. 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* web_contents = 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->tab_strip_model()->GetActiveWebContents(); 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::TitleWatcher title_watcher(web_contents, title_pass_); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) title_watcher.AlsoWaitForTitle(title_storing_); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) title_watcher.AlsoWaitForTitle(title_error_write_failed_); 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) title_watcher.AlsoWaitForTitle(title_error_empty_); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::NavigateToURL( 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser, GURL(fake_server_address_ + test_path_ + filename)); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 final_title = title_watcher.WaitAndGetTitle(); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(title_pass_, final_title); 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CheckReloadedPageRestored() { 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckTitle(browser(), title_pass_); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CheckReloadedPageRestored(Browser* browser) { 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckTitle(browser, title_pass_); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CheckReloadedPageNotRestored() { 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckTitle(browser(), title_storing_); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CheckTitle(Browser* browser, const string16& expected_title) { 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* web_contents = 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->tab_strip_model()->GetWebContentsAt(0); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TitleWatcher title_watcher(web_contents, expected_title); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_watcher.AlsoWaitForTitle(title_pass_); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_watcher.AlsoWaitForTitle(title_storing_); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_watcher.AlsoWaitForTitle(title_error_write_failed_); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_watcher.AlsoWaitForTitle(title_error_empty_); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It's possible that the title was already the right one before 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // title_watcher was created. 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 first_title = web_contents->GetTitle(); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (first_title != title_pass_ && 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) first_title != title_storing_ && 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) first_title != title_error_write_failed_ && 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) first_title != title_error_empty_) { 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 final_title = title_watcher.WaitAndGetTitle(); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_title, final_title); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_title, first_title); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void PostFormWithPage(const std::string& filename, bool password_present) { 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* web_contents = 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::TitleWatcher title_watcher(web_contents, title_pass_); 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::NavigateToURL( 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser(), GURL(fake_server_address_ + test_path_ + filename)); 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 final_title = title_watcher.WaitAndGetTitle(); 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(title_pass_, final_title); 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(g_last_upload_bytes.Get().find("posted-text") != 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string::npos); 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(g_last_upload_bytes.Get().find("text-entered") != 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string::npos); 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (password_present) { 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(g_last_upload_bytes.Get().find("posted-password") != 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string::npos); 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(g_last_upload_bytes.Get().find("password-entered") != 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string::npos); 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CheckFormRestored(bool text_present, bool password_present) { 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckReloadedPageRestored(); 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (text_present) { 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(g_last_upload_bytes.Get().find("posted-text") != 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string::npos); 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(g_last_upload_bytes.Get().find("text-entered") != 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string::npos); 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(g_last_upload_bytes.Get().find("posted-text") == 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string::npos); 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(g_last_upload_bytes.Get().find("text-entered") == 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string::npos); 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (password_present) { 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(g_last_upload_bytes.Get().find("posted-password") != 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string::npos); 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(g_last_upload_bytes.Get().find("password-entered") != 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string::npos); 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(g_last_upload_bytes.Get().find("posted-password") == 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string::npos); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(g_last_upload_bytes.Get().find("password-entered") == 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string::npos); 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string fake_server_address() { 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return fake_server_address_; 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string test_path() { 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return test_path_; 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string fake_server_address_; 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string test_path_; 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const string16 title_pass_; 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const string16 title_storing_; 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const string16 title_error_write_failed_; 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const string16 title_error_empty_; 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BetterSessionRestoreTest); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ContinueWhereILeftOffTest : public BetterSessionRestoreTest { 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContinueWhereILeftOffTest() { } 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BetterSessionRestoreTest::SetUpOnMainThread(); 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionStartupPref::SetStartupPref( 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), SessionStartupPref(SessionStartupPref::LAST)); 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ContinueWhereILeftOffTest); 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PRE_SessionCookies) { 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the startup preference to "continue where I left off" and visit a page 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // which stores a session cookie. 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StoreDataWithPage("session_cookies.html"); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, SessionCookies) { 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The browsing session will be continued; just wait for the page to reload 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and check the stored data. 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckReloadedPageRestored(); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PRE_SessionStorage) { 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StoreDataWithPage("session_storage.html"); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, SessionStorage) { 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckReloadedPageRestored(); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRE_PRE_LocalStorageClearedOnExit) { 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StoreDataWithPage("local_storage.html"); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRE_LocalStorageClearedOnExit) { 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Normally localStorage is restored. 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckReloadedPageRestored(); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ... but not if it's set to clear on exit. 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings::Factory::GetForProfile(browser()->profile())-> 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, LocalStorageClearedOnExit) { 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckReloadedPageNotRestored(); 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PRE_PRE_CookiesClearedOnExit) { 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StoreDataWithPage("cookies.html"); 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PRE_CookiesClearedOnExit) { 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Normally cookies are restored. 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckReloadedPageRestored(); 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ... but not if the content setting is set to clear on exit. 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CookieSettings::Factory::GetForProfile(browser()->profile())-> 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY); 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, CookiesClearedOnExit) { 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckReloadedPageNotRestored(); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PRE_Post) { 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PostFormWithPage("post.html", false); 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, Post) { 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckFormRestored(true, false); 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PRE_PostWithPassword) { 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PostFormWithPage("post_with_password.html", true); 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PostWithPassword) { 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckReloadedPageRestored(); 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The form data contained passwords, so it's removed completely. 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckFormRestored(false, false); 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class RestartTest : public BetterSessionRestoreTest { 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RestartTest() { } 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~RestartTest() { } 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Restart() { 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Simluate restarting the browser, but let the test exit peacefully. 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (chrome::BrowserIterator it; !it.done(); it.Next()) 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserContext::SaveSessionState(it->profile()); 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefService* pref_service = g_browser_process->local_state(); 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_service->SetBoolean(prefs::kWasRestarted, true); 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (pref_service->HasPrefPath(prefs::kRestartSwitchMode)) 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_service->SetBoolean(prefs::kRestartSwitchMode, false); 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(RestartTest); 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(RestartTest, PRE_SessionCookies) { 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StoreDataWithPage("session_cookies.html"); 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Restart(); 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(RestartTest, SessionCookies) { 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckReloadedPageRestored(); 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(RestartTest, PRE_SessionStorage) { 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StoreDataWithPage("session_storage.html"); 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Restart(); 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(RestartTest, SessionStorage) { 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckReloadedPageRestored(); 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(RestartTest, PRE_LocalStorageClearedOnExit) { 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StoreDataWithPage("local_storage.html"); 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CookieSettings::Factory::GetForProfile(browser()->profile())-> 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY); 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Restart(); 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(RestartTest, LocalStorageClearedOnExit) { 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckReloadedPageRestored(); 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(RestartTest, PRE_CookiesClearedOnExit) { 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StoreDataWithPage("cookies.html"); 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CookieSettings::Factory::GetForProfile(browser()->profile())-> 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY); 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Restart(); 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(RestartTest, CookiesClearedOnExit) { 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckReloadedPageRestored(); 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(RestartTest, PRE_Post) { 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PostFormWithPage("post.html", false); 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Restart(); 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(RestartTest, Post) { 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckFormRestored(true, false); 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(RestartTest, PRE_PostWithPassword) { 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PostFormWithPage("post_with_password.html", true); 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Restart(); 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(RestartTest, PostWithPassword) { 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The form data contained passwords, so it's removed completely. 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckFormRestored(false, false); 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// These tests ensure that the Better Session Restore features are not triggered 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// when they shouldn't be. 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class NoSessionRestoreTest : public BetterSessionRestoreTest { 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NoSessionRestoreTest() { } 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BetterSessionRestoreTest::SetUpOnMainThread(); 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionStartupPref::SetStartupPref( 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), SessionStartupPref(SessionStartupPref::DEFAULT)); 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NoSessionRestoreTest); 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, PRE_SessionCookies) { 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StoreDataWithPage("session_cookies.html"); 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, SessionCookies) { 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* web_contents = 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 46790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(std::string(content::kAboutBlankURL), 46890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) web_contents->GetURL().spec()); 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // When we navigate to the page again, it doens't see the data previously 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // stored. 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StoreDataWithPage("session_cookies.html"); 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, PRE_SessionStorage) { 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StoreDataWithPage("session_storage.html"); 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, SessionStorage) { 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* web_contents = 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 48190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(std::string(content::kAboutBlankURL), 48290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) web_contents->GetURL().spec()); 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StoreDataWithPage("session_storage.html"); 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PRE_PRE_LocalStorageClearedOnExit) { 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StoreDataWithPage("local_storage.html"); 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, PRE_LocalStorageClearedOnExit) { 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Normally localStorage is persisted. 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* web_contents = 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 49590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(std::string(content::kAboutBlankURL), 49690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) web_contents->GetURL().spec()); 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NavigateAndCheckStoredData("local_storage.html"); 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ... but not if it's set to clear on exit. 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CookieSettings::Factory::GetForProfile(browser()->profile())-> 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY); 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, LocalStorageClearedOnExit) { 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* web_contents = 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 50690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(std::string(content::kAboutBlankURL), 50790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) web_contents->GetURL().spec()); 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StoreDataWithPage("local_storage.html"); 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, PRE_PRE_CookiesClearedOnExit) { 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StoreDataWithPage("cookies.html"); 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, PRE_CookiesClearedOnExit) { 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Normally cookies are restored. 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* web_contents = 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 51990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(std::string(content::kAboutBlankURL), 52090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) web_contents->GetURL().spec()); 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NavigateAndCheckStoredData("cookies.html"); 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ... but not if the content setting is set to clear on exit. 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CookieSettings::Factory::GetForProfile(browser()->profile())-> 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY); 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, CookiesClearedOnExit) { 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* web_contents = 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 53090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(std::string(content::kAboutBlankURL), 53190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) web_contents->GetURL().spec()); 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StoreDataWithPage("local_storage.html"); 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 534