Index: content/browser/loader/async_revalidation_manager_browsertest.cc |
diff --git a/content/browser/loader/async_revalidation_manager_browsertest.cc b/content/browser/loader/async_revalidation_manager_browsertest.cc |
deleted file mode 100644 |
index 982ecebf4573d76043963cf2e2ef5266828585f9..0000000000000000000000000000000000000000 |
--- a/content/browser/loader/async_revalidation_manager_browsertest.cc |
+++ /dev/null |
@@ -1,250 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include <memory> |
-#include <string> |
-#include <utility> |
- |
-#include "base/bind.h" |
-#include "base/bind_helpers.h" |
-#include "base/macros.h" |
-#include "base/run_loop.h" |
-#include "base/strings/string16.h" |
-#include "base/strings/string_piece.h" |
-#include "base/strings/stringprintf.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "base/test/scoped_feature_list.h" |
-#include "content/public/common/browser_side_navigation_policy.h" |
-#include "content/public/common/content_features.h" |
-#include "content/public/test/browser_test_utils.h" |
-#include "content/public/test/content_browser_test.h" |
-#include "content/public/test/content_browser_test_utils.h" |
-#include "content/shell/browser/shell.h" |
-#include "net/test/embedded_test_server/embedded_test_server.h" |
-#include "net/test/embedded_test_server/http_request.h" |
-#include "net/test/embedded_test_server/http_response.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "url/gurl.h" |
- |
-namespace content { |
- |
-namespace { |
- |
-using net::test_server::HttpResponse; |
-using net::test_server::HttpRequest; |
-using net::test_server::BasicHttpResponse; |
- |
-const char kCountedHtmlPath[] = "/counted.html"; |
-const char kCookieHtmlPath[] = "/cookie.html"; |
- |
-class AsyncRevalidationManagerBrowserTest : public ContentBrowserTest { |
- protected: |
- AsyncRevalidationManagerBrowserTest() {} |
- ~AsyncRevalidationManagerBrowserTest() override {} |
- |
- void SetUp() override { |
- scoped_feature_list_.InitAndEnableFeature(features::kStaleWhileRevalidate); |
- ContentBrowserTest::SetUp(); |
- } |
- |
- void SetUpOnMainThread() override { |
- ContentBrowserTest::SetUpOnMainThread(); |
- run_loop_.reset(new base::RunLoop); |
- } |
- |
- base::RunLoop* run_loop() { |
- DCHECK(run_loop_); |
- return run_loop_.get(); |
- } |
- |
- int requests_counted() const { return requests_counted_; } |
- |
- // This method lacks diagnostics for the failure case because TitleWatcher |
- // will just wait until the test times out if |expected_title| does not |
- // appear. |
- bool TitleBecomes(const GURL& url, const std::string& expected_title) { |
- base::string16 expected_title16(base::ASCIIToUTF16(expected_title)); |
- TitleWatcher title_watcher(shell()->web_contents(), expected_title16); |
- NavigateToURL(shell(), url); |
- return title_watcher.WaitAndGetTitle() == expected_title16; |
- } |
- |
- void RegisterCountingRequestHandler() { |
- embedded_test_server()->RegisterRequestHandler(base::Bind( |
- &AsyncRevalidationManagerBrowserTest::CountingRequestHandler, |
- base::Unretained(this))); |
- } |
- |
- void RegisterCookieRequestHandler() { |
- embedded_test_server()->RegisterRequestHandler(base::Bind( |
- &AsyncRevalidationManagerBrowserTest::CookieRequestHandler, |
- base::Unretained(this))); |
- } |
- |
- private: |
- // A request handler which increases the number in the title tag on every |
- // request. |
- std::unique_ptr<HttpResponse> CountingRequestHandler( |
- const HttpRequest& request) { |
- if (request.relative_url != kCountedHtmlPath) |
- return nullptr; |
- |
- int version = ++requests_counted_; |
- |
- std::unique_ptr<BasicHttpResponse> http_response( |
- StaleWhileRevalidateHeaders()); |
- http_response->set_content( |
- base::StringPrintf("<title>Version %d</title>", version)); |
- |
- // The second time this handler is run is the async revalidation. Tests can |
- // use this for synchronisation. |
- if (version == 2) { |
- BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
- run_loop()->QuitClosure()); |
- } |
- return std::move(http_response); |
- } |
- |
- // A request handler which increases a cookie value on every request. |
- std::unique_ptr<HttpResponse> CookieRequestHandler( |
- const HttpRequest& request) { |
- static const char kHtml[] = |
- "<script>\n" |
- "var intervalId;\n" |
- "function checkCookie() {\n" |
- " if (document.cookie.search(/version=2/) != -1) {\n" |
- " clearInterval(intervalId);\n" |
- " document.title = \"PASS\";\n" |
- " }\n" |
- "}\n" |
- "intervalId = setInterval(checkCookie, 10);\n" |
- "</script>\n" |
- "<title>Loaded</title>\n"; |
- |
- if (request.relative_url != kCookieHtmlPath) |
- return nullptr; |
- |
- int version = ++requests_counted_; |
- |
- std::unique_ptr<BasicHttpResponse> http_response( |
- StaleWhileRevalidateHeaders()); |
- http_response->AddCustomHeader("Set-Cookie", |
- base::StringPrintf("version=%d", version)); |
- http_response->set_content(kHtml); |
- |
- return std::move(http_response); |
- } |
- |
- // Generate the standard response headers common to all request handlers. |
- std::unique_ptr<BasicHttpResponse> StaleWhileRevalidateHeaders() { |
- std::unique_ptr<BasicHttpResponse> http_response(new BasicHttpResponse); |
- http_response->set_code(net::HTTP_OK); |
- http_response->set_content_type("text/html; charset=utf-8"); |
- http_response->AddCustomHeader("Cache-Control", |
- "max-age=0, stale-while-revalidate=86400"); |
- // A validator is needed for revalidations, and hence |
- // stale-while-revalidate, to work. |
- std::string etag = base::StringPrintf( |
- "\"AsyncRevalidationManagerBrowserTest%d\"", requests_counted_); |
- http_response->AddCustomHeader("ETag", etag); |
- return http_response; |
- } |
- |
- std::unique_ptr<base::RunLoop> run_loop_; |
- int requests_counted_ = 0; |
- base::test::ScopedFeatureList scoped_feature_list_; |
- |
- DISALLOW_COPY_AND_ASSIGN(AsyncRevalidationManagerBrowserTest); |
-}; |
- |
-// Verify that the "Cache-Control: stale-while-revalidate" directive correctly |
-// triggers an async revalidation. |
-IN_PROC_BROWSER_TEST_F(AsyncRevalidationManagerBrowserTest, |
- StaleWhileRevalidateIsApplied) { |
- RegisterCountingRequestHandler(); |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // PlzNavigate: Stale while revalidate is disabled. |
- // TODO(clamy): Re-enable the test when there is support. |
- if (IsBrowserSideNavigationEnabled()) |
- return; |
- GURL url(embedded_test_server()->GetURL(kCountedHtmlPath)); |
- |
- EXPECT_TRUE(TitleBecomes(url, "Version 1")); |
- |
- // The first request happens synchronously. |
- EXPECT_EQ(1, requests_counted()); |
- |
- // Force the renderer to be destroyed so that the Blink cache doesn't |
- // interfere with the result. |
- NavigateToURL(shell(), GURL("about:blank")); |
- |
- // Load the page again. We should get the stale version from the cache. |
- EXPECT_TRUE(TitleBecomes(url, "Version 1")); |
- |
- // Wait for the async revalidation to complete. |
- run_loop()->Run(); |
- EXPECT_EQ(2, requests_counted()); |
-} |
- |
-// The fresh cache entry must become visible once the async revalidation request |
-// has been sent. |
-IN_PROC_BROWSER_TEST_F(AsyncRevalidationManagerBrowserTest, CacheIsUpdated) { |
- RegisterCountingRequestHandler(); |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // PlzNavigate: Stale while revalidate is disabled. |
- // TODO(clamy): Re-enable the test when there is support. |
- if (IsBrowserSideNavigationEnabled()) |
- return; |
- using base::ASCIIToUTF16; |
- GURL url(embedded_test_server()->GetURL(kCountedHtmlPath)); |
- |
- EXPECT_TRUE(TitleBecomes(url, "Version 1")); |
- |
- // Reset the renderer cache. |
- NavigateToURL(shell(), GURL("about:blank")); |
- |
- // Load the page again. We should get the stale version from the cache. |
- EXPECT_TRUE(TitleBecomes(url, "Version 1")); |
- |
- // Wait for the async revalidation request to be processed by the |
- // EmbeddedTestServer. |
- run_loop()->Run(); |
- |
- // Reset the renderer cache. |
- NavigateToURL(shell(), GURL("about:blank")); |
- |
- // Since the async revalidation request has been sent, the cache can no |
- // longer return the stale contents. |
- EXPECT_TRUE(TitleBecomes(url, "Version 2")); |
-} |
- |
-// When the asynchronous revalidation arrives, any cookies it contains must be |
-// applied immediately. |
-IN_PROC_BROWSER_TEST_F(AsyncRevalidationManagerBrowserTest, |
- CookieSetAsynchronously) { |
- RegisterCookieRequestHandler(); |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // PlzNavigate: Stale while revalidate is disabled. |
- // TODO(clamy): Re-enable the test when there is support. |
- if (IsBrowserSideNavigationEnabled()) |
- return; |
- GURL url(embedded_test_server()->GetURL(kCookieHtmlPath)); |
- |
- // Set cookie to version=1 |
- NavigateToURL(shell(), url); |
- |
- // Reset render cache. |
- NavigateToURL(shell(), GURL("about:blank")); |
- |
- // The page will load from the cache, then when the async revalidation |
- // completes the cookie will update. |
- EXPECT_TRUE(TitleBecomes(url, "PASS")); |
-} |
- |
-} // namespace |
- |
-} // namespace content |