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

Unified Diff: content/browser/service_worker/service_worker_browsertest.cc

Issue 2812513004: service worker: Clarify the navigation preload network error message. (Closed)
Patch Set: linebreak Created 3 years, 8 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 | « no previous file | content/renderer/service_worker/service_worker_context_client.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/service_worker/service_worker_browsertest.cc
diff --git a/content/browser/service_worker/service_worker_browsertest.cc b/content/browser/service_worker/service_worker_browsertest.cc
index 4cd88192d634a0a87562082bda0e1a2870e9d2e3..605daad6df34c47a423036d784d24f00019b0118 100644
--- a/content/browser/service_worker/service_worker_browsertest.cc
+++ b/content/browser/service_worker/service_worker_browsertest.cc
@@ -415,6 +415,14 @@ net::HttpResponseInfo CreateHttpResponseInfo() {
return info;
}
+const std::string kNavigationPreloadAbortError =
+ "The service worker navigation preload request was cancelled before "
+ "'preloadResponse' settled. If you intend to use 'preloadResponse', use "
+ "waitUntil() or respondWith() to wait for the promise to settle.";
+const std::string kNavigationPreloadNetworkError =
+ "The service worker navigation preload request failed with a network "
+ "error.";
+
} // namespace
class ServiceWorkerBrowserTest : public ContentBrowserTest {
@@ -510,6 +518,52 @@ class ConsoleListener : public EmbeddedWorkerInstance::Listener {
base::Closure quit_;
};
+// Listens to console messages on ServiceWorkerContextWrapper.
+class ConsoleMessageContextObserver
+ : public ServiceWorkerContextObserver,
+ public base::RefCountedThreadSafe<ConsoleMessageContextObserver> {
+ public:
+ explicit ConsoleMessageContextObserver(ServiceWorkerContextWrapper* context)
+ : context_(context) {}
+ void Init() { context_->AddObserver(this); }
+
+ // ServiceWorkerContextObserver overrides.
+ void OnReportConsoleMessage(int64_t version_id,
+ int process_id,
+ int thread_id,
+ const ConsoleMessage& console_message) override {
+ messages_.push_back(console_message.message);
+ if (messages_.size() == expected_message_count_) {
+ run_loop_.Quit();
+ }
+ }
+
+ void WaitForConsoleMessages(size_t expected_message_count) {
+ if (messages_.size() >= expected_message_count) {
+ context_->RemoveObserver(this);
+ return;
+ }
+
+ expected_message_count_ = expected_message_count;
+ run_loop_.Run();
+ ASSERT_EQ(messages_.size(), expected_message_count);
+ context_->RemoveObserver(this);
+ }
+
+ const std::vector<base::string16>& messages() const { return messages_; }
+
+ private:
+ friend class base::RefCountedThreadSafe<ConsoleMessageContextObserver>;
+ ~ConsoleMessageContextObserver() override {}
+
+ std::vector<base::string16> messages_;
+ size_t expected_message_count_ = 0;
+ base::RunLoop run_loop_;
+ ServiceWorkerContextWrapper* context_;
+
+ DISALLOW_COPY_AND_ASSIGN(ConsoleMessageContextObserver);
+};
+
class ServiceWorkerVersionBrowserTest : public ServiceWorkerBrowserTest {
public:
using self = ServiceWorkerVersionBrowserTest;
@@ -1896,13 +1950,23 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, NetworkError) {
EXPECT_TRUE(embedded_test_server()->ShutdownAndWaitUntilComplete());
+ scoped_refptr<ConsoleMessageContextObserver> console_observer =
+ new ConsoleMessageContextObserver(wrapper());
+ console_observer->Init();
+
const base::string16 title = base::ASCIIToUTF16("REJECTED");
TitleWatcher title_watcher(shell()->web_contents(), title);
title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED"));
NavigateToURL(shell(), page_url);
EXPECT_EQ(title, title_watcher.WaitAndGetTitle());
- EXPECT_EQ("NetworkError: Service Worker navigation preload network error.",
+ EXPECT_EQ("NetworkError: " + kNavigationPreloadNetworkError,
GetTextContent());
+
+ console_observer->WaitForConsoleMessages(1);
+ const base::string16 expected =
+ base::ASCIIToUTF16("net::ERR_CONNECTION_REFUSED");
+ std::vector<base::string16> messages = console_observer->messages();
+ EXPECT_NE(base::string16::npos, messages[0].find(expected));
}
IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest,
@@ -1919,7 +1983,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest,
kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript,
"text/javascript");
- EXPECT_EQ("NetworkError: Service Worker navigation preload network error.",
+ EXPECT_EQ("NetworkError: " + kNavigationPreloadAbortError,
LoadNavigationPreloadTestPage(page_url, worker_url, "REJECTED"));
}
@@ -2036,12 +2100,22 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest,
"text/javascript");
RegisterStaticFile(kRedirectedPageUrl1, kRedirectedPage, "text/html");
+ scoped_refptr<ConsoleMessageContextObserver> console_observer =
+ new ConsoleMessageContextObserver(wrapper());
+ console_observer->Init();
+
// According to the spec, multiple Location headers is not an error. So the
// preloadResponse must be resolved with an opaque redirect response.
// But Chrome treats multiple Location headers as an error (crbug.com/98895).
- EXPECT_EQ("NetworkError: Service Worker navigation preload network error.",
+ EXPECT_EQ("NetworkError: " + kNavigationPreloadNetworkError,
LoadNavigationPreloadTestPage(page_url, worker_url, "REJECTED"));
+ console_observer->WaitForConsoleMessages(1);
+ const base::string16 expected =
+ base::ASCIIToUTF16("ERR_RESPONSE_HEADERS_MULTIPLE_LOCATION");
+ std::vector<base::string16> messages = console_observer->messages();
+ EXPECT_NE(base::string16::npos, messages[0].find(expected));
+
// The page request must be sent only once, since the worker responded with
// a generated Response.
EXPECT_EQ(1, GetRequestCount(kPageUrl));
@@ -2070,7 +2144,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest,
// preloadResponse must be resolve with an opaque redirect response. But
// currently Chrome handles the invalid location URL in the browser process as
// an error. crbug.com/707185
- EXPECT_EQ("NetworkError: Service Worker navigation preload network error.",
+ EXPECT_EQ("NetworkError: " + kNavigationPreloadAbortError,
LoadNavigationPreloadTestPage(page_url, worker_url, "REJECTED"));
// The page request must be sent only once, since the worker responded with
« no previous file with comments | « no previous file | content/renderer/service_worker/service_worker_context_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698