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

Unified Diff: chrome/browser/prerender/prerender_test_utils.cc

Issue 2304953002: NoState Prefetch: nostate prefetch browser tests. (Closed)
Patch Set: comments Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/prerender/prerender_test_utils.h ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/prerender/prerender_test_utils.cc
diff --git a/chrome/browser/prerender/prerender_test_utils.cc b/chrome/browser/prerender/prerender_test_utils.cc
index af4a6dab6c2db51194b4aa3fc8d7edefc3885be3..65fd62c6321e860a0297a4e9cdbf567eb6d9f47e 100644
--- a/chrome/browser/prerender/prerender_test_utils.cc
+++ b/chrome/browser/prerender/prerender_test_utils.cc
@@ -5,6 +5,7 @@
#include "chrome/browser/prerender/prerender_test_utils.h"
#include "base/command_line.h"
+#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/loader/chrome_resource_dispatcher_host_delegate.h"
#include "chrome/browser/prerender/prerender_manager.h"
#include "chrome/browser/prerender/prerender_manager_factory.h"
@@ -13,6 +14,8 @@
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/pref_names.h"
+#include "chrome/grit/generated_resources.h"
+#include "chrome/test/base/ui_test_utils.h"
#include "components/prefs/pref_service.h"
#include "content/public/browser/notification_details.h"
#include "content/public/browser/notification_source.h"
@@ -24,6 +27,7 @@
#include "net/url_request/url_request_filter.h"
#include "ppapi/shared_impl/ppapi_switches.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/base/l10n/l10n_util.h"
using content::BrowserThread;
using content::RenderViewHost;
@@ -63,7 +67,7 @@ class MockHTTPJob : public net::URLRequestMockHTTPJob {
base::Closure start_callback_;
};
-// Protocol handler which counts the number of requests that start.
+// URLRequestInterceptor which counts the number of requests that start.
class CountingInterceptor : public net::URLRequestInterceptor {
public:
CountingInterceptor(const base::FilePath& file,
@@ -307,6 +311,44 @@ void TestPrerenderContents::Observe(
PrerenderContents::Observe(type, source, details);
}
+DestructionWaiter::DestructionWaiter(TestPrerenderContents* prerender_contents,
+ FinalStatus expected_final_status)
+ : expected_final_status_(expected_final_status),
+ saw_correct_status_(false) {
+ if (prerender_contents->final_status() != FINAL_STATUS_MAX) {
+ // The contents was already destroyed by the time this was called.
+ MarkDestruction(prerender_contents->final_status());
+ } else {
+ marker_ = base::MakeUnique<DestructionMarker>(this);
+ prerender_contents->AddObserver(marker_.get());
+ }
+}
+
+DestructionWaiter::~DestructionWaiter() {}
+
+bool DestructionWaiter::WaitForDestroy() {
+ if (!saw_correct_status_) {
+ wait_loop_.Run();
+ }
+ return saw_correct_status_;
+}
+
+void DestructionWaiter::MarkDestruction(FinalStatus reason) {
+ saw_correct_status_ = (reason == expected_final_status_);
+ wait_loop_.Quit();
+}
+
+DestructionWaiter::DestructionMarker::DestructionMarker(
+ DestructionWaiter* waiter)
+ : waiter_(waiter) {}
+
+DestructionWaiter::DestructionMarker::~DestructionMarker() {}
+
+void DestructionWaiter::DestructionMarker::OnPrerenderStop(
+ PrerenderContents* contents) {
+ waiter_->MarkDestruction(contents->final_status());
+}
+
TestPrerender::TestPrerender()
: contents_(nullptr), number_of_loads_(0), expected_number_of_loads_(0) {}
@@ -401,6 +443,33 @@ TestPrerenderContentsFactory::ExpectedContents::ExpectedContents(
TestPrerenderContentsFactory::ExpectedContents::~ExpectedContents() {}
+TestPrerenderManager::TestPrerenderManager(Profile* profile)
+ : PrerenderManager(profile), time_(base::Time::Now()) {}
+
+base::Time TestPrerenderManager::GetCurrentTime() const {
+ if (delta_.is_zero()) {
+ return base::Time::Now();
+ }
+ return time_ + delta_;
+}
+
+base::TimeTicks TestPrerenderManager::GetCurrentTimeTicks() const {
+ if (delta_.is_zero()) {
+ return base::TimeTicks::Now();
+ }
+ return time_ticks_ + delta_;
+}
+
+void TestPrerenderManager::AdvanceTime(base::TimeDelta delta) {
+ if (delta_.is_zero()) {
+ time_ = base::Time::Now();
+ time_ticks_ = base::TimeTicks::Now();
+ delta_ = delta;
+ } else {
+ delta_ += delta;
+ }
+}
+
PrerenderInProcessBrowserTest::PrerenderInProcessBrowserTest()
: external_protocol_handler_delegate_(
base::MakeUnique<NeverRunsExternalProtocolHandlerDelegate>()),
@@ -408,7 +477,14 @@ PrerenderInProcessBrowserTest::PrerenderInProcessBrowserTest()
base::MakeUnique<safe_browsing::TestSafeBrowsingServiceFactory>()),
prerender_contents_factory_(nullptr),
explicitly_set_browser_(nullptr),
- autostart_test_server_(true) {}
+ autostart_test_server_(true) {
+ PrerenderManagerFactory::set_testing_create_function(
+ [](content::BrowserContext* context) {
+ return static_cast<std::unique_ptr<KeyedService>>(
droger 2016/09/23 09:54:39 Is the static cast really needed? Can you instead
+ base::MakeUnique<TestPrerenderManager>(
+ Profile::FromBrowserContext(context)));
+ });
+}
PrerenderInProcessBrowserTest::~PrerenderInProcessBrowserTest() {}
@@ -432,6 +508,15 @@ PrerenderInProcessBrowserTest::GetSessionStorageNamespace() const {
return web_contents->GetController().GetDefaultSessionStorageNamespace();
}
+std::string PrerenderInProcessBrowserTest::MakeAbsolute(
+ const std::string& path) {
+ CHECK(!path.empty());
+ if (path.front() == '/') {
+ return path;
+ }
+ return "/" + path;
+}
+
bool PrerenderInProcessBrowserTest::UrlIsInPrerenderManager(
const std::string& html_file) const {
return UrlIsInPrerenderManager(embedded_test_server()->GetURL(html_file));
@@ -465,19 +550,10 @@ std::unique_ptr<TestPrerender> PrerenderInProcessBrowserTest::PrerenderTestURL(
const std::string& html_file,
FinalStatus expected_final_status,
int expected_number_of_loads) {
- GURL url = embedded_test_server()->GetURL(html_file);
+ GURL url = src_server()->GetURL(MakeAbsolute(html_file));
return PrerenderTestURL(url, expected_final_status, expected_number_of_loads);
}
-ScopedVector<TestPrerender> PrerenderInProcessBrowserTest::PrerenderTestURL(
- const std::string& html_file,
- const std::vector<FinalStatus>& expected_final_status_queue,
- int expected_number_of_loads) {
- GURL url = embedded_test_server()->GetURL(html_file);
- return PrerenderTestURLImpl(url, expected_final_status_queue,
- expected_number_of_loads);
-}
-
std::unique_ptr<TestPrerender> PrerenderInProcessBrowserTest::PrerenderTestURL(
const GURL& url,
FinalStatus expected_final_status,
@@ -492,6 +568,15 @@ std::unique_ptr<TestPrerender> PrerenderInProcessBrowserTest::PrerenderTestURL(
return std::unique_ptr<TestPrerender>(prerenders[0]);
}
+ScopedVector<TestPrerender> PrerenderInProcessBrowserTest::PrerenderTestURL(
+ const std::string& html_file,
+ const std::vector<FinalStatus>& expected_final_status_queue,
+ int expected_number_of_loads) {
+ GURL url = src_server()->GetURL(MakeAbsolute(html_file));
+ return PrerenderTestURLImpl(url, expected_final_status_queue,
+ expected_number_of_loads);
+}
+
void PrerenderInProcessBrowserTest::SetUpInProcessBrowserTestFixture() {
safe_browsing_factory_->SetTestDatabaseManager(
new test_utils::FakeSafeBrowsingDatabaseManager());
@@ -524,15 +609,59 @@ void PrerenderInProcessBrowserTest::SetUpOnMainThread() {
ASSERT_TRUE(safe_browsing_factory_->test_safe_browsing_service());
}
+void PrerenderInProcessBrowserTest::UseHttpsSrcServer(
+ std::function<void(net::EmbeddedTestServer*)> startup) {
+ if (https_src_server_)
+ return;
+ https_src_server_.reset(
+ new net::EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTPS));
+ https_src_server_->ServeFilesFromSourceDirectory("chrome/test/data");
+ startup(https_src_server_.get());
+ CHECK(https_src_server_->Start());
+}
+
+base::string16 PrerenderInProcessBrowserTest::MatchTaskManagerTab(
+ const char* page_title) {
+ return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_TAB_PREFIX,
+ base::ASCIIToUTF16(page_title));
+}
+
+base::string16 PrerenderInProcessBrowserTest::MatchTaskManagerPrerender(
+ const char* page_title) {
+ return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_PRERENDER_PREFIX,
+ base::ASCIIToUTF16(page_title));
+}
+
+ScopedVector<TestPrerender>
+PrerenderInProcessBrowserTest::NavigateWithPrerenders(
+ const GURL& loader_url,
+ const std::vector<FinalStatus>& expected_final_status_queue,
+ int expected_number_of_loads) {
+ CHECK(!expected_final_status_queue.empty());
+ ScopedVector<TestPrerender> prerenders;
+ for (size_t i = 0; i < expected_final_status_queue.size(); i++) {
+ prerenders.push_back(
+ prerender_contents_factory()
+ ->ExpectPrerenderContents(expected_final_status_queue[i])
+ .release());
+ }
+
+ // Navigate to the loader URL and then wait for the first prerender to be
+ // created.
+ ui_test_utils::NavigateToURL(current_browser(), loader_url);
+ prerenders.get().at(0)->WaitForCreate();
+ prerenders.get().at(0)->WaitForLoads(expected_number_of_loads);
+
+ return prerenders;
+}
+
void CreateCountingInterceptorOnIO(
const GURL& url,
const base::FilePath& file,
const base::WeakPtr<RequestCounter>& counter) {
CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
- std::unique_ptr<net::URLRequestInterceptor> request_interceptor(
- new CountingInterceptor(file, counter));
net::URLRequestFilter::GetInstance()->AddUrlInterceptor(
- url, std::move(request_interceptor));
+ url, base::MakeUnique<CountingInterceptor>(file, counter));
}
void CreateMockInterceptorOnIO(const GURL& url, const base::FilePath& file) {
« no previous file with comments | « chrome/browser/prerender/prerender_test_utils.h ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698