0

[Service Worker] Add console message for aborted preload request

When a navigation preload request is aborted, no console message is
sent to the service worker. That's because the "unsanitized_message"
field of blink::WebServiceWorkerError is not set.

When Sending the message to console, prefer the unsanitized one if
avaiable. Update service worker browser test to cover this change.

Bug: 877870
Test: content_browsertests  -gtest_filter=ServiceWorkerNavigationPreloadTest.CanceledByInterceptor
Change-Id: Icad28ce1a9feb40b729bc2504d9c9adb33593a0a
Reviewed-on: https://chromium-review.googlesource.com/1235376
Commit-Queue: Leon Han <leon.han@intel.com>
Reviewed-by: Matt Falkenhagen <falken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#593823}
This commit is contained in:
Ting Shao
2018-09-25 04:15:17 +00:00
committed by Commit Bot
parent 86f51f0bf9
commit 06f028f7d6
3 changed files with 17 additions and 3 deletions
AUTHORS
content/browser/service_worker
third_party/blink/renderer/modules/service_worker

@ -859,6 +859,7 @@ Tim Niederhausen <tim@rnc-ag.de>
Timo Gurr <timo.gurr@gmail.com>
Timo Reimann <ttr314@googlemail.com>
Timo Witte <timo.witte@gmail.com>
Ting Shao <ting.shao@intel.com>
Tom Callaway <tcallawa@redhat.com>
Tom Harwood <tfh@skip.org>
Tomas Popela <tomas.popela@gmail.com>

@ -2318,6 +2318,10 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest,
return;
}
auto console_observer =
base::MakeRefCounted<ConsoleMessageContextObserver>(wrapper());
console_observer->Init();
content::ResourceDispatcherHost::Get()->RegisterInterceptor(
kNavigationPreloadHeaderName, "",
base::Bind(&CancellingInterceptorCallback));
@ -2332,6 +2336,11 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest,
EXPECT_EQ(kNavigationPreloadAbortError,
LoadNavigationPreloadTestPage(page_url, worker_url, "REJECTED"));
console_observer->WaitForConsoleMessages(1);
const base::string16 expected = base::ASCIIToUTF16("request was cancelled");
std::vector<base::string16> messages = console_observer->messages();
EXPECT_NE(base::string16::npos, messages[0].find(expected));
}
IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest,

@ -435,11 +435,15 @@ void ServiceWorkerGlobalScopeProxy::OnNavigationPreloadError(
DCHECK(WorkerGlobalScope()->IsContextThread());
FetchEvent* fetch_event = pending_preload_fetch_events_.Take(fetch_event_id);
DCHECK(fetch_event);
// Display an unsanitized console message.
if (!error->unsanitized_message.IsEmpty()) {
// Display an error message to the console, preferring the unsanitized one if
// available.
const WebString& error_message = error->unsanitized_message.IsEmpty()
? error->message
: error->unsanitized_message;
if (!error_message.IsEmpty()) {
WorkerGlobalScope()->AddConsoleMessage(ConsoleMessage::Create(
kWorkerMessageSource, blink::MessageLevel::kErrorMessageLevel,
error->unsanitized_message));
error_message));
}
// Reject the preloadResponse promise.
fetch_event->OnNavigationPreloadError(